Постановка задачи для web.finar.ru
Содержание: (спрятать)
Сайт для собственного детища никак не назовешь заурядной задачей - ведь его хочется сделать просто-таки идеальным со всех сторон, как капля дистиллированной воды в невесомости. Как вы уже могли прочитать, web.finar.ru задуман как подраздел Finar.ru и является первым шагом к реструктуризации основного сайта.
Итак, требования для web.finar.ru включают требования к будущему обновленному Finar.ru и сводятся к следующему:
- упрощение рутинной верстки: все частые операции должны быть автоматизированны;
- автоматическая генерирование фотогалереи и вывод одиночных фотографий для упрощения публикаций;
- java-кнопки для создания спрятанных областей контента;
- широкий набор GUI-кнопок, поддерживающих большую часть синтаксиса;
- скрытие служебных элементов интерфейса сайта для неавторизованных пользователей;
- возможность включения любой части контента finar.ru в дизайне web.finar.ru
Установлено на этапе localhost: до первой публикации сайта
- LazyWebLinks с некоторой доработкой. Всякий текст, начинающийся на "www." становится ссылкой на внешний ресурс; все ссылки на внешние ресурсы открываются в новом окне, а также снабжаются стрелочкой. В config.php это выглядит следующим образом:
- ## make link every "www."-starting text| Finar
- Markup('lazyweb','<wikilink', "/\\bwww\\.[^\\s$UrlExcludeChars]*[^\\s.,?!$UrlExcludeChars]/e", "Keep(MakeLink(\$pagename,'http://$0','$0'),'L')");
- ## open every external link in a new window by default | Finar
- $UrlLinkFmt = "<a class='urllink' target='_blank' title='\$LinkUrl' rel='nofollow' href='\$LinkUrl'>\$LinkText </a><img src='$PubDirUrl/external.png' width='11' height='12' alt='External Link to \$LinkUrl' title='External Link to \$LinkUrl' border='0' />";
- Toggle - добавляет javascript-овые кнопочки для скрытия части контента страницы и облегчения ее восприятия. Кнопочки, как видите, тут повсюду, а в config.php это выглядит следующим образом:
- ## JAVAScript open/close buttons for content hiding | Finar
- include_once("$FarmD/cookbook/toggle.php");
- $ToggleConfig = array(
- 'init' => 'hide', //show div
- 'show' => XL("подробнее"), //link text 'Show'
- 'hide' => XL("скрыть"), //link text 'Hide'
- 'ttshow' => XL("подробнее"), //tooltip text 'Show'
- 'tthide' => XL("скрыть"), //tooltip text 'Hide'
- 'set' => false, //set no cookie to remeber toggle state
- 'id' => '', //no default div name
- 'id2' => '', //no default div2 name
- 'set' => false, //set no cookie to remeber toggle state
- 'printhidden' => true, // hidden divs get printed
- );
- PageTableOfContents и BreakPage - первый автоматически генерирует содержание страницы и расставляет по ней якоря; второй разбивает большие статьи на несколько страниц. Удобно, например, для отделения комментариев от основной статьи. Первый рецепт рекомендуется применять вместе со вторым. Пример работы вы видите в начале статьи, а в config.php это выглядит следующим образом:
- ## automatic Table of Contents generation | Finar
- $ToggleText = array('спрятать', 'показать');
- include_once('cookbook/pagetoc.php');
- $DefaultTocTitle = "Содержание:";
- $NumberToc = false;
- $TocFloat = true;
- ## divides pages on few parts. Required for pagetoc.php (Table of Contents) | Finar
- include_once('cookbook/break_page.php');
- RememberEditPosition - запоминает положение фрейма с кодом при нажатии кнопки "preview". В config.php это выглядит следующим образом:
- ## cursor restore after preview | Finar
- if ( $action == 'edit' ) {
- $InputTags['e_scrolltop'][':html'] =
- "<input type='hidden' name='prev_scroll' id='prev_scroll' value='".
- intval(@$_POST['prev_scroll'])."'/>";
- $HTMLHeaderFmt[] = "<script type='text/javascript'>
- function addEvent( obj, evt, fn ) {
- if (obj.addEventListener) obj.addEventListener( evt, fn, false );
- else if (obj.attachEvent) obj.attachEvent( 'on'+evt, fn );
- }
- var ps;
- addEvent( window, 'load', function() {
- ps = document.getElementById('prev_scroll');
- if ( ps.value > 0 ) document.getElementById('text').scrollTop = ps.value;
- addEvent( ps.form, 'submit', function() { ps.value = ps.form.text.scrollTop; } )
- } );
- </script>";
- }
- Обнулен $UploadPrefixFmt - чтобы все аплоады хранить в папке uploads кучей, без разделения на поддиректории (как и сами страницы pmwiki, что со структурной точки зрения вполне логично). В config.php это выглядит банально как "
$UploadPrefixFmt = '';
" но честно говоря я еще не уверен, что это правильный шаг. Возможно, от всеобщей коллективизации лучше все же воздержаться. - В Site.PageActions добавлено примерно такое условие: "
(:if auth edit:) [[Edit -> ?action=edit]] (:if:)
", скрывающее от неавторизованного пользователя служебные элементы интерфейса. В шаблон дизайна добавлена скрытая кнопка авторизации. - GuiEdit и расширение MyGuiEdit - набор GUI-кнопочек для удобства редактирования. Кнопочки были доработаны в соответствии с моим набором расширений.
- ThumbList - автоматизированный генератор фотогалерей. Самостоятельно создает превьюшки для графических файлов при первом запросе. Интегрирован с Lightbox - известной javascript'овой фотогалереей. Автор скрипта Petko по моей просьбе любезно доработал скрипт с тем, чтобы титлы превьюшек, если они заданы, передавались в описание фотографии при полноэкранном просмотре. Думаю, он включит изменения в новый релиз; ну а если нет, обращайтесь - вышлю. Примеры работы и синтаксиса здесь, а в config.php это выглядит следующим образом:
- ## lightbox JAVAScript gallery with autotrumbs generation | Finar
- include_once("$FarmD/cookbook/thumblist2.php");
- $ThumbList['fPreChecks'] = 'uThumbLightbox';
- function uThumbLightbox(&$opt)
- {
- global $HTMLHeaderFmt, $ThumbList;
- $linkrel = IsEnabled($opt['rel'], $ThumbList['LinkRel']);
- if(preg_match("/lightbox/i", $linkrel))
- {
- $LightboxDirUrl = "/pub/lb"; # LIGHTBOX DIRECTORY
- $opt['rel'] = 'lightbox[?G]';
- $HTMLHeaderFmt['lightbox'] =<<<EOF
- <script type="text/javascript" src="$LightboxDirUrl/prototype.js"></script>
- <script type="text/javascript" src="$LightboxDirUrl/scriptaculous.js?load=effects"></script>
- <script type="text/javascript"><!--
- LightboxDirUrl = "$LightboxDirUrl";//--></script>
- <script type="text/javascript" src="$LightboxDirUrl/lightbox.js"></script>
- <link rel="stylesheet" href="$LightboxDirUrl/lightbox.css" type="text/css" media="screen"/>
- EOF;
- }
- }
- $ThumbList['_tmpl']['awrap'] = "<a href='?L' class='thumblink' title='?2' %2\$s>%1\$s</a> ";
- $ThumbList['LinkRel'] = 'lightbox';
Интеграция с Finar.ru
Интеграция одной установленной PmWiki с другими возможна несколькими способами. Расскажу обо всех в порядке уменьшения их кривости и увеличения пригодности к моей задаче. Напомню ее - получить возможность включения любой части контента finar.ru в дизайне web.finar.ru Проследив за моим поиском, вы сможете представить путь продвижения исследования от постановки задачи к очень неожиданному решению. Это именно то, что доставляет мне наибольшее удовольствие при разработке.
- Викифермы
- Include через php
- Прочие вариации разнообразных инклюдов внешнего контента
- Парсинг чужой PmWiki.Страницы через внешний линк с приставкой ?action=source
- Парсинг чужой PmWiki.Страницы через файловую систему "изнутри"
Trouble with recipe I'm trying to start this recipe on pmwiki-2.2.4 under Windows XAMPP. After installing clean pmwiki-2.2.4, the only thing I did was adding
- $EnableLinkPageRelative = 0;
- $SisterFmt = array(
- 'Test' => array(
- 'dirfmt' => '$FarmD/wiki.d/{$FullName}',
- 'scripturl' => "http://localhost/",
- 'attachurlprefix' => "http://localhost/" ),
- );
- include_once("$FarmD/cookbook/sisterly.php");
to my config.php (I took the values pointing to wiki itselt just to see if it can work. Any other values also does not work)
Immediately after this I get these two warnings in all my pages: "Warning: Invalid argument supplied for foreach() in W:\S(serving).@exc\pmwiki.php on line 406"
"Warning: Cannot modify header information - headers already sent by (output started at W:\S(serving).@exc\pmwiki.php:406) in W:\S(serving).@exc\pmwiki.php on line 1084"
Could you please help me to find how do to solve this problem? Thanks!
Finar, 2009-08-18
Ah, found the bug. I'll need to verify this later (no server access just now), but it should get fixed either by patching sisterly.php's line 40 from
SDVA( $SearchPatterns['farm'], $SearchPatterns['default'] );
to
if (!empty($SearchPatterns['default'])) SDVA($SearchPatterns['farm'], $SearchPatterns['default']);
or by including the following line in your config.php before including Sisterly:
SDV($SearchPatterns['default'], array());
It's a matter of Sisterly incorrectly assuming that some default search pattern has been set, which obviously isn't the default case. — Eemeli Aro August 18, 2009, at 03:52 PM
- Расшаривание части страниц
- Мой рецепт: использование одной-единственной инсталляции pmwiki
- #определеяем титл в зависимости от домена, по которому обращается посетитель. Меняем необходимые переменные.
- if ($_SERVER['HTTP_HOST'] == 'finar.ru' || $_SERVER['HTTP_HOST'] == 'www.finar.ru' ) {
- $WikiTitle = 'Finar.ru - информационный портал';
- #$Skin =
- }
- else if ($_SERVER['HTTP_HOST'] == 'web.finar.ru' || $_SERVER['HTTP_HOST'] == 'www.web.finar.ru' ) {
- $WikiTitle = 'Web-студия "Ph & Ph"';
- $DefaultGroup = 'Web';
- $DefaultPage = 'Web.PhPh';
- #$Skin =
- }
- else {
- $WikiTitle = 'домен не определен';
- $DefaultGroup = 'Web';
- $DefaultPage = 'Web.PhPh';
- #$Skin =
- }
К установке при размещении на хостинге
Некоторые рецепты нет смысла применять на локальной машине, но перед публичным релизом я их обязательно задействую:
- CleanUrls - человекопонятные ссылки (ЧПУ) через mod_rewrite;
- FastCache - кэширование;
- SEO - базовая оптимизация для поисковых систем.
Еще несколько рецептов, обязательных к применению в ближайшем будущем
- RSS - настройка RSS;
- EditAttributes - поля для редактирования title, description.
И, наконец, любопытные рецепты, которые возможно понадобятся в будущем
- Creole - включение поддержки универсальной wiki-разметки Creole. Пока плохо реализовано, ждем-с;
- SocialBookmarkIcons - кнопки добавления страниц в популярные сервисы закладок. Стоит проверить, есть ли поддержка специфики Рунета;
- AddThisWidget - некая автоматизация публикаций контента в блогах. Стоит проверить, есть ли поддержка специфики Рунета;
- ExcelPaste - вставка таблиц из excel;
- PmDocConvert - интеграция офисных форматов файлов;
- ConfirmEditNotSaved - предупреждать, если уходишь со страницы не сохранившись.
О дальнейшей настройке сайта читайте в статье PmWiki как CMS: шаг второй
Оставить комментарий