форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
По ходу использования возникла пара вопросов.
В силу специфики сайта есть такая необходимость - ставить куски кода внутрь статьи.
Проблема с "несанкционированной" заменой кавычек с "программистских" на вычурные решилась вставкой html-тегов
<p><code> код код код </code></p>.
Но остальное внутри кода Текстиль все равно парсит (обрабатывает).
Строчный тег отключения обработки - это тег ==
А вот как сделать блочное отключение обработки текста текстилем - хотя бы для кусков кода?
Спасибо заранее за ответ.
!
Извините за невнимательность.
Что-то глючило в процессе ввода текста, т.к. набирался из многих источников.
На самом деле - по крайней мере, у меня на локалхосте в русской сборке 4.03 Текстиль не обрабатывает то, что находится в пределах тегов <code> и <pre>.
Но вопрос все равно остается.
Отредактированно marazmus (27-01-2006 11:15:09)
Неактивен
да ну его... я замучался когда статью по плагинам текстилем размечал.
Лучше уж написать текст, оттекстилить, а тотом в полученный html уже руками вставить что нужно, а текстиль вырубить для всей статьи.
Неактивен
Спасибо за совет, так и пришлось сделать, на пока.
И еще по этой теме:
Товарищ из буржуинских стран Dunstan Orchard предлагает функцию, которая заменяет "свой" тег <codeins ...> результатом обработки этой функции текстового файла с кодом - программой и т.п.
http://www.1976design.com/blog/archive/ … transform/
Как "внедрить" это в статичные страницы на уровне html, я примерно допер - на этой странице расписан способ:
<?php // include the file with the transformation scripts in include('blog/include/general_transform.php'); // grab your post_body from the db, I do it like this: // $post_body = stripslashes($row['post_body']); // transform all the code listings $post_body = preg_replace('!<codeins="(.*?)" />!ie', "codeTransform('$1')", $post_body); // transform all the image tags $post_body = preg_replace('!<imageins="(.*?)" alt="(.*?)" caption="(.*?)" class="(.*?)" link="(.*?)" linktitle="(.*?)" />!ie', "imageTransform('$1', '$2', '$3', '$4', '$5', '$6')", $post_body); // $post_body now contains your complete, transformed post, ready to be printed out: print $post_body; ?>
А вот как внедрить это в Textpattern, я пока никак не пойму; к тому же нет знаний по php, хотя есть опыт программирования на других языках.
Может, кто-нибудь хотя бы "на пальцах" сможет обьяснить, как эту функцию "запихать" в textpattern?
!
Извиняюсь за путаность обьяснений.
Щас, постараюсь расписать по-другому.
Есть функция на php, текст под рукой.
Ее задача - получить имя текстового файла (ссылку) и обработать его определенным образом; конкретно - сделать список (ul) строк текста, содержащегося в этом файле.
Потом, если на этот список есть ссылки в css сайта, то он "обрастет красивостями" типа цвета фона, бордюрчиков и т.п., но это неважно пока.
Этот список заменяет собой весь тег <codeins ...>, на который и "натравливается" данная функция.
Из вышеприведенного кода видно, что непосредственно замена тега на сформированный функцией список происходит здесь:
$post_body = preg_replace('!<codeins="(.*?)" />!ie', "codeTransform('$1')", $post_body);
И касательно самого Текстпаттерна - куда же "засунуть" в код движка этот preg_replace, чтобы не повредить остальному парсингу текста через Текстиль?
p.s. Функция очень сильная, т.к. решает глобальную проблему Текстиля - полную неспособность нормально работать с кусками исходников программ (кода); к тому же есть возможность настраивать подсветку.
Помогите, кто чем может, люди.
Спасибо заранее.
Отредактированно marazmus (27-01-2006 14:39:18)
Неактивен
marazmus написал:
как сделать блочное отключение обработки текста текстилем
Можно сделать так:
< notextile >
Куски текста, которые не надо "текстилить" помещать внутри этих тэгов.
< /notextile >
Неактивен
Да, видел я как у Данстана всё красиво...
Можно без проблем реализовать новый тэг <txp:nck_code file="filename.ext" /> который при выводе будет заменяться на то что нужно, а именно на нумерованный список строк (можно ещё и подсветку синтаксиса прикрутить)... это не проблема. Файлы с кусками кода как и где хранить? Заливать через админку как file? Если так то никаких проблем.
Думаю, вооружившить php manul'ом и статьей о написании плагинов для txp ты сможешь прикрутить решение Данстана к нашему любимому движку.
Кстати для того чтоб выводить картинки так как предлагает он вроде был плагин, может и для кода тоже уже есть готовый.
Неактивен
Ура!
Нашел плагин krl_geshiSyntaxHighlight, использует модуль GeSHi, который нужно качать отдельно и ставить распаковкой.
Все выглядит очень круто, используется просто тег текстпаттерновского типа.
Как смогу установить на свой сайт (на локалхосте работает замечательно), сразу кину ссылку "на поглядеть".
Правда, проблема с блочным отключением текстиля так и осталась, приходится делать статьи в html - по крайней мере те, которые содержат куски кода.
Тег <notextile> - такое ощущение, что он просто не работает.
!!
А вот и обещанная ссылка!
http://mod.worldofgothic.ru/0S_news/30/ … dulya-pozh
С подсветкой нужно работать, это скриптовый язык игры Готика, так что еще предстоит заполнение языкового файла. Но все равно, очень замечательный модуль, этот GeSHi.
В общем, делаем так:
(если не считать дня, потраченного на "разборки" с тем, как это все делается, то все устанавливается "с полпинка")
1) Качаем сам модуль GeSHi
а) здесь - "усеченная" версия, 207 274 байт zip
http://mod.worldofgothic.ru/files/site_ … /geshi.zip
б) или качаем полную версию с документацией, килобайт на 800, с домашней странички модуля:
http://qbnz.com/highlighter/
Файл geshi.php кладем в каталог textpattern, каталог /geshi с модулями подсветки конкретных языков - туда же.
Примечание: В каталоге contrib архива - пара файлов для проверки работы и демонстрации возможностей; плюс простой css-генератор для языка. Но слишком простой - я, честно говоря, "потырил" css из демонстратора, там он формируется гораздо богаче.
Ну и набор готовых языковых раскладок впечатляет - 56 штук.
2) Устанавливаем модуль для textpattern, чтобы использовать GeSHi тегом текстпаттерна - krl_geshiSyntaxHighlight
Пока брать здесь, т.к. ссылка с сайта textpattern.org глючит - 5 417 байт
http://mod.worldofgothic.ru/files/site_ … ighter.txt
устанавливаем через админпанель;
3) Заменяем подправленной версией (или правим сами, под себя и свои предпочтения - разметка через div, использование pre, где лежит модуль GeSHi и т.п.
http://mod.worldofgothic.ru/files/site_ … module.php
В принципе, все; можно попробовать составить простую тестовую статью:
Пример использования модуля GeSHi. <txp:krl_geshiSyntaxHighlight language="gothic_script"> instance DIA_Onar_WannaSheep(C_Info) { npc = Bau_900_Onar; nr = 10; condition = DIA_Onar_WannaSheep_Condition; information = DIA_Onar_WannaSheep_Info; permanent = TRUE; description = "Я хочу купить овцу!"; }; </txp:krl_geshiSyntaxHighlight> Очень красиво, не так ли?
В превью красоты не видно, но на сайте это выглядит просто здорово.
p.s. Нумерацию строк, которая стоит по умолчанию, я убрал - т.к. при копировании текста кода через выделение к нему добавляются строки вида
#
_пустая строка
что не очень приятно.
А без нумерации - все нормально.
p.p.s. И еще раз отмечу - правим без текстиля.
p.p.p.s. У плагина еще есть режим работы как одиночный тег - с спользованием имени файла как источника текста для разметки. Но пока я этот режим "победить" не смог.
Плюс этого режима - текстиль не "корявит" код, т.к. в тексте статьи только тег вида <txp:krl_geshiSyntaxHighlight language="php" file="files/my_code.txt"> и все.
Минус - текстовые файлы нужно все-таки как-то заливать; подходящий раздел - файлы, но есть опасность нахождения "дыры" в парсинге, если кто-то зальет "хитрый"файл (а может, это просто у меня паранойя ).
Все, все, ухожу .
Спасибо за поддержку.
Отредактированно marazmus (27-01-2006 21:57:42)
Неактивен
Evgeny написал:
marazmus написал:
как сделать блочное отключение обработки текста текстилем
Можно сделать так:
< notextile >
Куски текста, которые не надо "текстилить" помещать внутри этих тэгов.
< /notextile >
Это таки не работает.
Или я торможу.
В любом случае, очень сильно раздражает эта невозможность отключения текстиля. Лучше уж тогда все в html писать. И пропадает весь смысл использования текстиля .
В исходнике текстиля (lib/classTextile.php) написано
Version 2.0 beta
- может, есть более новая версия?
!
Нашел немного извратное, но работающее решение, в итоге.
Пишем в html, изначально. Но если уж захочется использовать текстиль в статье, ставим этот хак и радуемся жизни .
http://flashrocket.worldoptimizer.com/a … extile-tag
хак - потому что нужно заливать файл на сайт и править иходник publish.php, правда, всего одну строку.
Отредактированно marazmus (29-01-2006 14:12:09)
Неактивен
marazmus написал:
Это таки не работает.
похоже - в пределах одного абзаца только работает. Согласен, это не удобно.
Неактивен