| проектирование лестниц | чемоданы |
wiki:LinkExchangeИMoinMoin

LinkExchange и MoinMoin

Для использования LinkExchange в  MoinMoin выполните следующее:

  1. Скопируйте файл linkexchange/MoinMoin/macro/LinkExchangeBlock.py (или сделайте символическую ссылку на него) в каталог data/plugin/macro вашего экземпляра вики, либо создайте в этом каталоге файл LinkExchangeBlock.py содержащий одну строку from linkexchange.MoinMoin.macro.LinkExchangeBlock import *.
  2. Создайте файл конфигурации linkexchange.cfg и дайте ссылку на него в файле wikiconfig.py в параметре linkexchange_config.
  3. Используйте макрос <<LinkExchangeBlock(индекс)>> для размещения блока ссылок, где индекс - номер блока начиная с нуля.

Фрагмент файла конфигурации wikiconfig.py для примера:

class Config(DefaultConfig):
    ...

    linkexchange_config = './linkexchange.cfg'

Пример конфигурации linkexchange.cfg:

[client-1]
type = sape
user = user12345
db_driver.type = shelve
db_driver.filename = %(basedir)s/sape-XXX.db

[client-2]
type = linkfeed
user = user12345
db_driver.type = shelve
db_driver.filename = %(basedir)s/linkfeed-XXX.db

[formatter-1]
type = list
count = 2
class_ = linx
prefix = "-&nbsp;"
suffix = ". "

[formatter-2]
type = inline
count = 2
class_ = linx
delimiter = " | "
prolog = "| "
epilog = " |"

[formatter-3]
type = list
count = none
class_ = linx
prefix = "+&nbsp;"
suffix = ". "

Макрос LinkExchangeBlock можно использовать в классе темы, например:

class Theme(ThemeBase):
    ...

    def linkexchange_block(self, num, d):
        request = self.request
        try:
            macro = d['macro']
        except KeyError:
            try:
                from MoinMoin.macro import Macro
            except ImportError:
                from MoinMoin.wikimacro import Macro
            pname = request.cfg.default_markup or 'wiki'
            try:
                Parser = wikiutil.searchAndImportPlugin(request.cfg,
                        'parser', pname)
            except AttributeError:
                Parser = wikiutil.importPlugin(request.cfg,
                        'parser', pname, 'Parser')
            parser = Parser(u'', request)
            macro = d['macro'] = Macro(parser)
        return macro.execute('LinkExchangeBlock', num)

    def footer(self, d, **keywords):
        page = d['page']
        parts = [
            self.endPage(),
            self.linkexchange_block(0, d),
            u'</div></div>',
             self.emit_custom_html(self.cfg.page_footer1),
            u'<div class="footer">',
            self.credits(d),
            self.pageinfo(page),<