MovableType - рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреБрдЫ рдЕрдВрд╢

MovableType рд╣рдорд╛рд░реЗ рджреЗрд╢ рдореЗрдВ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреНрд▓реЙрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, 5 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рд╕рд╛рдЗрдЯ рдХрд╛ рдкреНрд░рдмрдВрдзрди рднреА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрдЯреИрдЯрд┐рдХ html рдлрд╛рдЗрд▓реНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░рдХреЗ рдкреЗрд░рд▓ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝реЗ рд▓реЛрдб рдХреЛ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЭреЗрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдУрдкрдирд╕реЛрд░реНрд╕ рдФрд░ рдкреНрд░реЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдПрдХ рдЕрд░реНрдз-рдореБрдХреНрдд рдореЛрдб рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдШрдбрд╝реА, рдШрдбрд╝реА, рднреБрдЧрддрд╛рди, рдЙрдкрдпреЛрдЧред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд┐рд╕реНрдЯрдо OOP рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рдЧрднрдЧ рд╣рд░ рдЫреАрдВрдХ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рд╣реИрдВ, ORM рд╣реИ, рд╕рдм рдХреБрдЫ рд▓рдЧрднрдЧ рдареАрдХ рд╣реИ ...

рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрдирд╛


рддреЛ, рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ: рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ред рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

рдкреНрд▓рдЧрдЗрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдВрддрд┐рдо рджреЛ рдмрд┐рдВрджреБ рдХрднреА-рдХрднреА рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рдореЗрдВ рдкрд░рд┐рдгрдд рд╣реЛрддреЗ рд╣реИрдВред рдХреБрдЫ рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдкреНрд▓рдЧрдЗрдиреНрд╕ рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ mt-hacks.com рд╕реЗ TemplateInstaller ред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдордЯреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдзреНрдпрд╛рди рд╕реЗ рд╕реЛрдЪреЗрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдЖрдВрджреЛрд▓рдиреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗред

MT рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рд╡рд░рдг


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЬрдиреНрдо рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдИ:
plugins/coolplugin/
plugins/coolplugin/lib/
plugins/coolplugin/tmpl/
mt-static/plugins/coolplugin/

рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реЛрдЪрд╛: рдХреНрдпрд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, config.yaml рд▓рд┐рдЦреЗрдВред рдХреБрдЫ (4.xx рдкреНрд░рдХрд╛рд░) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рд╡рд░рдг config.yaml рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреА рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдХреНрдпрд╛ рдФрд░ config.yaml рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ ред рдпрджрд┐ рдЖрдк рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд╕реНрд╡рд╛рдЧрдд рд╣реИ, $mt/lib/MT/Plugin.pm рдФрд░ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ:
 рдирд╛рдо: рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдирд╛рдоред  рдПрдХ рдЫреЛрдЯреА рд░реЗрдЦрд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдлрд┐рдЯ рд╣реЛред
 рдЖрдИрдбреА: рдкреНрд▓рдЧрдЗрди рдирд╛рдо
 Author_link: рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ
 author_name: рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦрдХ рдХрд╛ рдирд╛рдо
 рд╡рд┐рд╡рд░рдг: <__ рдЯреНрд░рд╛рдВрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ = "рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рд╡рд░рдг, рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдиреВ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ">
 рд╕рдВрд╕реНрдХрд░рдг: рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдг
 рд╕реНрдХреАрдорд╛_рд╡рд░реНрдЬрди: рдкреНрд▓рдЧрдЗрди рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛ рд╕рдВрд╕реНрдХрд░рдг
 plugin_link: рдЙрд╕ рдкреГрд╖реНрда рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдЖрдк рдкреНрд▓рдЧрдЗрди рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
 doc_link: рдЙрд╕ рдкреГрд╖реНрда рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдкреНрд▓рдЧрдЗрди рд╡рд┐рд╡рд░рдг рд╣реИ
 blog_config_template: template_name with_configuration_page.tpl
 l10n_class: рдкреНрд▓рдЧрдЗрди :: рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд╡рд░реНрдЧ
 рдЖрдЗрдХрди: рдкреНрд▓рдЧрдЗрди рдЫрд╡рд┐! {gif / png / jpg / itd}
 рд╕реЗрдЯрд┐рдВрдЧреНрд╕:
     рдХреНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧ:
         рдбрд┐рдлрд╝реЙрд▓реНрдЯ: "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди"
         рдЧреБрдВрдЬрд╛рдЗрд╢: рдмреНрд▓реЙрдЧ
     рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ:
         рдбрд┐рдлрд╝реЙрд▓реНрдЯ: "рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг"

 init: $ рдкреНрд▓рдЧрд┐рди :: рдореЙрдбреНрдпреВрд▓ :: рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛рд░реНрдп

 рдХреЙрд▓рдмреИрдХ:
     рдХреБрдЫ рд╣реИрдХ: $ рдкреНрд▓рдЧрд┐рди :: рдореЙрдбреНрдпреВрд▓ :: рд╣реИрдХ рдлрд╝рдВрдХреНрд╢рди

 рдЯреИрдЧ:
     рд╕рдорд╛рд░реЛрд╣:
         рдЯреИрдЧрдирд╛рдо: $ рдкреНрд▓рдЧрдЗрди :: рдореЙрдбреНрдпреВрд▓ :: рдЯреИрдЧ_рдлрдВрдХреНрд╢рди
     рдмреНрд▓реЙрдХ:
         рдмреНрд▓реЙрдХрдЯреИрдЧрдирд╛рдо: $ рдкреНрд▓рдЧрдЗрди :: рдореЙрдбреНрдпреВрд▓ :: рдмреНрд▓реЙрдХ_рдлрдВрдХреНрд╢рди_рдлрдВрдХреНрд╢рди

 object_types:
     рд╡рд╕реНрддреБ:
         рдлрд╝реАрд▓реНрдб: рдЯрд╛рдЗрдк # рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛
         рдлрд╝реАрд▓реНрдб: рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдореЗрдЯрд╛ # рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА

 рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ:
     # рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ, рдЬрдмрдХрд┐ рд╡реЗ рднреВрд▓ рдЧрдП


рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдХреА рдХрдореА рдЖрдкрдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░реЗрдЧреАред
рдКрдкрд░, рдореИрдВрдиреЗ рдЙрди рд╕рднреА рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬреЛ рдореИрдВ рдЦреБрдж рднрд░ рдЖрдпрд╛ рдерд╛ред icon: рд░реВрдк рдореЗрдВ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЯреНрд░рд┐рдлрд╝рд▓ icon: рдПрдордЯреА рдХреЗ рдХреЛрдб рдореЗрдВ рд╣реА рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдирд╣реАрдВред

рдкреНрд▓рдЧрдЗрди рд╡рд┐рдиреНрдпрд╛рд╕


рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдПрдордЯреА рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕реНрд╡рдпрдВ рд╕реЗрдЯрд┐рдВрдЧ рдкреЗрдЬ рдмрдирд╛рдПрдВ, рдпрд╛ рдСрдЯреЛ-рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд▓рдЧ-рдЗрди 2-3-4 рд╕рд░рд▓ рд░реЗрдЦрд╛рдУрдВ / рдЪреЗрдХрдмреЙрдХреНрд╕ / рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдСрдЯреЛ-рдЬрдирд░реЗрдЯрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдбреЗрдкреНрдЯ рдПрдордЯреА рдмреЗрд░реЗрди рд░реАрдЬрд╝ ("рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдордЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЬрд╛рдирддрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдЙрдирдХреЗ рдкреЛрд╕реНрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ)" HOWTO: рдУрди рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ "рд▓реЗрдЦ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдореИрдВ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдореБрдЭреЗ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛:

рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди

рдПрдордЯреА рдЦреБрдж рдбреЗрдЯрд╛ рдХреЛ рдХрд╣реАрдВ рднреА рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдзрд┐рдХрддрдо рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рддреЛ, рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд▓рдЧрдЗрди рдХреНрд▓рд╛рд╕ рд╣реИ рдЬреЛ рдЗрдирд┐рдЯ рд╣реБрдХ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдКрдкрд░ config.yaml рджреЗрдЦреЗрдВ)ред рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧ рдЗрди / OurPlugin / lib / Plugin.pm рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ) рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 package OurPlugin::Plugin use base 'MT::Plugin'; sub cb_init { my $p = shift; return bless $p, 'OurPlugin::Plugin'; } 

рдФрд░ config.yaml рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ:
init: $OurPlugin::Plugin::cb_init

рддреЛ, рдмрдЪрдд рдХреЗ рд╕рдордп, OurPlugin :: Plugin: save_config рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рддреАрди рддрд░реНрдХ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ: рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ, рд╣реИрд╢ рдореЗрдВ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдФрд░ рд╕реНрдХреЛрдк рдХреНрд╖реЗрддреНрд░ред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЖрдзрд╛рд░ MT :: Plugin рд╣реИ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рд╣рд░ рдЪреАрдЬ рдХреЛ-рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╣рдо рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 sub save_config { my ($plugin, $args, $scope) = @_; my @errors; #           if (@errors) { return $plugin->error("<br />\n".join("<br />\n", @errors)); } return $plugin->SUPER::save_config($args, $scope); } ## end sub save_config 


рдпрд╣ рдмрдЪрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдбрд░рд╛рд╡рдирд╛ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмреИрдХ рдмрдЯрди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП? рдЖрдк рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди load_config рдЬреЛрдбрд╝реЗрдВ:
 sub load_config { my ($plugin, $args, $scope) = @_; $plugin->SUPER::load_config($args, $scope); #   -   ,   $plugin->error()   if($plugin->errstr) { # Set $args->{error} to display error banner right before plugin settings $args->{error} = $plugin->errstr; } } ## end sub load_config 

рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдбрд╛рд▓реЗрдВ
  <mt:if name="error"> <mtapp:statusmsg id="generic-error" class="error"> <mt:var name="error"> </mtapp:statusmsg> </mt:if> 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рд╣реИ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдХрдИ рдорд╛рдирдХ рдЯреИрдЧ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣реА рд╣реИ, рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрдХрд╡рд╛рд╕ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдЕрд▓рдЧ рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдЧ рдЖрдИрдбреА рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ - рдФрд░ рдпрд╣рд╛рдВ load_config $args->{...} load_config рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП load_config рд╕реЗ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрдПрдЧрд╛ $args->{...} рдЖрд╡рд╢реНрдпрдХ рдЪрд░, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

JQuery рдХрдиреЗрдХреНрд╢рди рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдмрд╣реБрдд рд╣реА рдордЬреЗрджрд╛рд░ рдкрд▓ред MT5 рдкреВрд░реНрдг рд░реВрдк рд╕реЗ jQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди MT4 рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдЙрд╕реА рд╕рдордп, MT4 рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА jQ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╕рд┐рд░реНрдл jQ рдХреЛ рд╣рдореЗрд╢рд╛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рд░ рдореЗрдВ рд╕рдВрдШрд░реНрд╖ рд╣реЛрдЧрд╛ред
рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ blog_config.tmpl рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
 <mt:If tag="Version" lt="5"> <script type="text/javascript"> // prevent double-load of jQuery, save if jQ already loaded its state if(window.jQuery) { window.__PLUG_jQ = window.jQuery; window.__PLUGB = window.$; } </script> <script type="text/javascript" src="<$mt:StaticWebPath$>jquery/jquery.js"></script> <script type="text/javascript"> // Restore there jQ state, if it was loaded before if(window.__PLUG_jQ) { window.jQuery = window.__PLUG_jQ; window.$ = window.__PLUGB; window.__PLUG_jQ = undefined; window.__PLUGB = undefined; } </script> </mt:If> 

рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ jQ рдмрд┐рд▓реНрдХреБрд▓ рд▓реЛрдб рд╣реЛрдВрдЧреЗ рдФрд░ $ / jQuery рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЬрд╛рджреВ рдХрд╛ рдЯреИрдЧ


рдЕрдм рдЯреИрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдмреНрд▓реЙрдХред

рдПрдХ рдЯреИрдЧ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн, рддрд░реНрдХ, рд╢рд░реНрддреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ, рдЯреИрдЧреНрд╕ рдХреЛ <$mt:$> рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рд╡рд╛рд▓:


рдПрдХ рдмреНрд▓реЙрдХ рдЯреИрдЧ рдпрд╛ рддреЛ рдПрдХ рд▓реВрдк, рдпрд╛ рдПрдХ рд╢рд░реНрдд, рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдЗрдВрдЯрд░реНрдирд▓" рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд▓реЙрдХ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ config.yaml рдореЗрдВ рдЯреИрдЧ / рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ)ред рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреИрдЧ рд▓реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 sub tag_myloop { my($ctx, $args, $cond) = @_; my $builder = $ctx->stash('builder'); #       . #   ,     -  my $tokens = $ctx->stash('tokens'); #   ,     my $res = ''; my $vars = $ctx->{__stash}{vars} ||= {}; for my $i (0..$#looparray) { my $item = $looparray[$i]; #    ,        local $vars->{__item__} = $item; #     local $vars->{__first__} = $i == 0; local $vars->{__last__} = ($i==($#looparray-1)); local $vars->{__odd__} = ($i % 2) == 0; local $vars->{__even__} = ($i % 2) == 1; local $vars->{__counter__} = $i+1; defined(my $out = $builder->build($ctx, $tokens, $cond)) or return $ctx->error($builder->errstr); $res .= $out; } return $res; } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╢рд░реАрд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ, рдЖрдк рдПрдХ рдФрд░ рддрд░реНрдХ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ: рдЯреИрдЧ рдмреНрд▓реЙрдХ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рднреА рдЯреИрдЧ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╣реАред

рдХреЙрд▓рдмреИрдХ: рдХрд░реНрдиреЗрд▓ рд╣реИрдХ


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдордЯреА рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЫрдбрд╝реА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рд╕реНрдерд╛рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рд╕рднреА рдХреЛ рд╡рд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ MT::App::CMS::template_param. рдкрд░ рдПрдХ рд╣реБрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ template_output рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЕрдЧрд░ рдХреЛрдИ рдорд╛рдВрдЧ рд╣реИ, рддреЛ рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ) рдпреЗ рд╣реБрдХ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдЬрдм рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реБрдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ run_callbacks рдХреЗ рд▓рд┐рдП MT рдХреЛрдб рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ POD рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред

рдЪреВрдВрдХрд┐ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрдмрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрджрд░ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рд▓рд┐рдВрдХ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддреИрдирд╛рдд рдХрд░рдирд╛ред
Config.yaml рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
  рдХреЙрд▓рдмреИрдХ:
     MT :: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ :: pre_save: $ OurPlugin :: Plugin :: cb_entry_pre_save
     # cms_pre_save.entry: $ OurPlugin :: Plugin :: cb_cms_pre_save_entry
     # api_pre_save.entry: $ OurPlugin :: Plugin :: cb_api_pre_save_entry 

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдмрд┐рдВрджреБ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдкрд╛рда рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрдбрд╝реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


Entry_pre_save рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ regexp рджреНрд╡рд╛рд░рд╛ рдкрд╛рда рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 sub cb_entry_pre_save { my ($cb, $entry, $original) = @_; my $txt = $entry->text; if ($txt ne $original->text) { my $newtxt = $txt; # regexp from twitter-blackbird-pie plugin $newtxt =~ s/([^a-zA-Z0-9_]|^)([@\xef\xbc\xa0]+)([a-zA-Z0-9_]{1,20})(\/[a-zA-Z][a-zA-Z0-9\x80-\xff-]{0,79})?/$1@<a href="http://twitter.com/intent/user?screen_name=$3" class="twitter-action">$3</a>/ug; $entry->text($newtxt) if ($newtxt ne $txt); } return 1; } ## end sub cb_entry_pre_save 


рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕


рдПрдордЯреА рдЦреБрдж рдХреЛ рдХрдИ "рдЕрд▓рдЧ" рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЙрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреБ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╣реИ:


Config.yaml рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдкреНрд▓рдЧрдЗрди рд╡рд┐рд╕реНрддрд╛рд░ / рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рд╕рдВрдкреВрд░реНрдг рдЦрдВрдб рдЕрддреНрдпрдВрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ (рдХреЗрд╡рд▓ PODs рдореЗрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рджреЗрдЦреЗрдВ)ред
рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдЬрд╛рдХреНрд╕ рдХреЙрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдЕрдЬрд╛рдХреНрд╕ рд╡рд┐рдзрд┐:
  applitcations:
     рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:
         рд╡рд┐рдзрд┐:
             record_some_info: $ OurPlugin :: Plugin :: ajax_record_some_info 

рдФрд░ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди:
 sub ajax_record_some_info { my ($app) = @_; my $blog = $app->blog; my $result = "{'error': 'No information supplied'}"; my $user_name = $app->param('user_name'); my $info = $app->param('info'); if ($user_name && $info) { $result = do_store_info($user_name, $info); #     } $app->send_http_header(""); $app->print($result); return $app->{no_print_body} = 1; } ## end sub ajax_record_some_info 

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ (рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдХреЗрд╡рд▓ рдЙрддреНрдкрдиреНрди рдкрде):
 var u = mtGetUser(); if(u && !u.is_anonymous) { jQuery.post({ url: '<mt:CGIPath encode_js='1'><mt:CommentScript encode_js='1'>', '__mode': 'record_some_info', 'user_name': u.name, 'info': 'he he' }); 

рдпрд╣рд╛рдВ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП URL <mt: CGIPath encode_js = '1'> <mt: CommentScript encode_js = '1'> рдХрд┐рдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╛рдзрд╛рди рдПрдХ .js рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдордЯреА рдЦреБрдж рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рд╣реИрдбрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ
 <script>COMMENTS_URL = '<mt:CGIPath encode_js='1'><mt:CommentScript encode_js='1'>';</script> 

рдФрд░ рдЬрд╣рд╛рдБ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ_URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЫреВрдЯреЗ рд╣реБрдП рдкрд▓


рдореИрдВрдиреЗ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдФрд░ i18n рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдкреГрд╖реНрда рдХреИрд╕реЗ рдмрдирд╛рдПрдВред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рдЕрдВрдХ рдореЗрдВ рдкрдврд╝рд┐рдПред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


Source: https://habr.com/ru/post/In119939/


All Articles