Контекстно-зависимая справка - PHP класс - PullRequest
1 голос
/ 08 марта 2010

All

У меня есть PHP веб-приложение, созданное с использованием Zend Framework и MVC с базой данных MySQL. Я планирую внедрить контекстно-зависимую справку для приложения. Я провел исследование, но не нашел хороших указателей, как этого добиться.

Может кто-нибудь указать мне на книгу или хороший пример с примером, который делает это? Я вижу, что это реализовано на сайтах крупных страховых компаний и других сайтах Web 2.0. Как они все это делают?

Спасибо

Ответы [ 3 ]

2 голосов
/ 12 марта 2010

Я сделал это с помощью простой вики с использованием синтаксиса PHPMarkdown.

В вики было гораздо больше дополнительной связанной документации, поэтому страницы контекстной справки начинались с префикса «Справка» в заголовке. Это было полезно, поскольку позволяло страницам справки ссылаться на другую документацию по бизнес-процессам и избавляло меня от повторения в нескольких местах (ухмылка).

В скрипт макета я добавил пункт меню «Справка», который отображался с помощью помощника

class Zend_View_Helper_ContextHelp extends Zend_View_Helper_Abstract
{
    //-------------------------------------------------------------------------
    /*! \brief Context sensitive help: links to wiki page
    */
    function contextHelp( $title = 'Help' )
    {
        $controller = Zend_Controller_Front::getInstance();
        $request = $controller->getRequest();
        $page = 'Help ' . ucfirst( $request->getControllerName() );
        if ($request->getActionName() != 'index') $page .= ' ' . ucfirst( $request->getActionName() );
        return $this->view->url( array( 'controller' => 'manual', 'action' => 'index', 'page' => $page ), null, true );
    }
}

, поэтому эта ссылка была видна в правом верхнем углу каждой страницы.

Для действия клиента / редактирования страница справки будет «Помочь клиенту редактировать». Многие из моих страниц содержали справочную информацию и ссылки, уже встроенные в них: поэтому в полях формы были описания, предлагающие правильное содержание с примерами, некоторые со ссылками на вики-страницы для более подробной информации или расширенных примеров.

Схема базы данных вики очень проста

CREATE TABLE `manual` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT COMMENT 'Unique manual identifier',
  `title` varchar(40) NOT NULL DEFAULT '' COMMENT 'Short title of this page',
  `content` text NOT NULL COMMENT 'Content of the page. (wiki format)',
  `user_id` mediumint(9) NOT NULL DEFAULT '0' COMMENT 'The related user',
  `last_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date and time this record was last changed',
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `title` (`title`),
  KEY `last_modified` (`last_modified`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='Franchise Manual' AUTO_INCREMENT=50 ;

Рад опубликовать руководство модели и контроллера (плюс несколько вспомогательных помощников), но они немного длинны ... дайте мне знать, если вы заинтересованы, и я сделаю пост в блоге и ссылку на него отсюда.

1 голос
/ 12 марта 2010

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

Если вы используете вики, вы можете сделать так, чтобы ваша функция справки (как бы она ни выглядела) указывала на вики-страницы вроде documentation:installation:4_creating_databases и использовала настраиваемый шаблон для отображения вики-страницы во всплывающем окне, например.

Что касается поиска подходящего приложения для ведения документации, может быть, этот вопрос поможет: Хорошее программное обеспечение для документации и, возможно, также минималистичные инструменты для документации для разработчиков (немного другой фокус, но очень хорошие рекомендации ).

0 голосов
/ 09 марта 2010

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

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

...