C ++ (CppCMS) рдореЗрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯред рднрд╛рдЧ 1

рд╣реИрд▓реЛ рдкреНрд░рд┐рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%ред

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде CppCMS рдкрд░ рдПрдХ рд╡реЗрдм рд╕рд╛рдЗрдЯ (C ++ рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдмрдирд╛рдиреЗ рдХреЗ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЖрдк рдЗрд╕реЗ "рдиреМрд╕рд┐рдЦрд┐рдпрд╛ CppCMS рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдорджрдж рдХрд░рдирд╛" рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред



C ++ рдореЗрдВ рд╕рд╛рдЗрдЯ рдХреНрдпреЛрдВ рд▓рд┐рдЦреЗрдВ



рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╡рд┐рдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП, "рднрд╛рд╖рд╛ рд╕реНрдХреВрд▓реЛрдВ" рдХреЗ рдпреБрджреНрдз рдХреЛ рднрдбрд╝рдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдореИрдВ рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдирддрд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реВрдВрдЧрд╛: "рдореИрдВрдиреЗ рдЗрд╕реЗ рдЦрд░реАрджрд╛ред рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рдореИрдВ рдЬрд╛рддрд╛ рд╣реВрдВред рдореИрдВ рдмреЗрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛! "

рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ, рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╣реИред



рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ



рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ


рд╕рд╛рдЗрдЯ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ (CppCMS) рдПрдХ рд╡рд░реНрдХрд┐рдВрдЧ рдорд╢реАрди рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ Boost c ++, pcre, crypt, python, icu рдХреЛ рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдФрд░, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ * nix рд╕рд┐рд╕реНрдЯрдо рдХреЗ рддрд╣рдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред

рдирд┐рд░реНрдорд╛рдг рдЦреБрдж рд╣реА рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ:



mkdir build cd build cmake .. make make install
      
      





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



рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╕реНрдЯрдо рдирд┐рд░реНрдорд╛рдг рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд "рдкрд╛рд░реНрд╕рд░" рд╣реИ, рдореИрдВ QtCreator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

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



рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, QtCreator рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ * .tmpl рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ tmpl.xml рдлрд╝рд╛рдЗрд▓ (рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд HTML рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ) qtcreator / рдЬреЗрдиреЗрд░рд┐рдХ-рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ / tmpl.xml рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:



рдлрд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE language SYSTEM "language.dtd" [ <!ENTITY name "[A-Za-z_:][\w.:_-]*"> <!ENTITY entref "&(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);"> ]> <language name="TMPL" version="1" kateversion="2.4" section="Markup" extensions="*.tmpl" mimetype="text/tmpl" author="Wilbert Berendsen ( original HTML author)(wilbert@kde.nl)" license="LGPL" priority="10"> <highlighting> <contexts> <context name="Start" attribute="Normal Text" lineEndContext="#stay"> <IncludeRules context="FindHTML" /> </context> <context name="FindHTML" attribute="Normal Text" lineEndContext="#stay"> <DetectSpaces/> <DetectIdentifier/> <StringDetect attribute="Comment" context="Comment" String="<!--" beginRegion="comment" /> <StringDetect attribute="Commenttmpl" context="Commenttmpl" String="<%" beginRegion="commenttmpl" /> <StringDetect attribute="CDATA" context="CDATA" String="<![CDATA[" beginRegion="cdata" /> <RegExpr attribute="Doctype" context="Doctype" String="<!DOCTYPE\s+" beginRegion="doctype" /> <RegExpr attribute="Processing Instruction" context="PI" String="<\?[\w:-]*" beginRegion="pi" /> <RegExpr attribute="Element" context="CSS" String="<style\b" insensitive="TRUE" beginRegion="style" /> <RegExpr attribute="Element" context="JS" String="<script\b" insensitive="TRUE" beginRegion="script" /> <RegExpr attribute="Element" context="El Open" String="<pre\b" insensitive="TRUE" beginRegion="pre" /> <RegExpr attribute="Element" context="El Open" String="<div\b" insensitive="TRUE" beginRegion="div" /> <RegExpr attribute="Element" context="El Open" String="<table\b" insensitive="TRUE" beginRegion="table" /> <RegExpr attribute="Element" context="El Open" String="<ul\b" insensitive="TRUE" beginRegion="ul" /> <RegExpr attribute="Element" context="El Open" String="<ol\b" insensitive="TRUE" beginRegion="ol" /> <RegExpr attribute="Element" context="El Open" String="<dl\b" insensitive="TRUE" beginRegion="dl" /> <RegExpr attribute="Element" context="El Open" String="<&name;" /> <RegExpr attribute="Element" context="El Close" String="</pre\b" insensitive="TRUE" endRegion="pre" /> <RegExpr attribute="Element" context="El Close" String="</div\b" insensitive="TRUE" endRegion="div" /> <RegExpr attribute="Element" context="El Close" String="</table\b" insensitive="TRUE" endRegion="table" /> <RegExpr attribute="Element" context="El Close" String="</ul\b" insensitive="TRUE" endRegion="ul" /> <RegExpr attribute="Element" context="El Close" String="</ol\b" insensitive="TRUE" endRegion="ol" /> <RegExpr attribute="Element" context="El Close" String="</dl\b" insensitive="TRUE" endRegion="dl" /> <RegExpr attribute="Element" context="El Close" String="</&name;" /> <!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" /> <IncludeRules context="FindEntityRefs" /> </context> <context name="FindEntityRefs" attribute="Other Text" lineEndContext="#stay"> <StringDetect attribute="Commenttmpl" context="Commenttmpl" String="<%" beginRegion="commenttmpl" /> <RegExpr attribute="EntityRef" context="#stay" String="&entref;" /> <AnyChar attribute="Error" context="#stay" String="&<" /> </context> <context name="FindPEntityRefs" attribute="Other Text" lineEndContext="#stay"> <RegExpr attribute="EntityRef" context="#stay" String="&entref;" /> <RegExpr attribute="PEntityRef" context="#stay" String="%&name;;" /> <AnyChar attribute="Error" context="#stay" String="&%" /> </context> <context name="FindAttributes" attribute="Other Text" lineEndContext="#stay"> <RegExpr attribute="Attribute" context="#stay" String="&name;" column="0"/> <RegExpr attribute="Attribute" context="#stay" String="\s+&name;" /> <DetectChar attribute="Attribute" context="Value" char="=" /> </context> <context name="FindDTDRules" attribute="Other Text" lineEndContext="#stay"> <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="<!(ELEMENT|ENTITY|ATTLIST|NOTATION)\b" /> </context> <context name="Comment" attribute="Comment" lineEndContext="#stay"> <DetectSpaces/> <IncludeRules context="##Alerts" /> <DetectIdentifier/> <StringDetect attribute="Comment" context="#pop" String="-->" endRegion="comment" /> <RegExpr attribute="Error" context="#stay" String="-(-(?!->))+" /> </context> <context name="Commenttmpl" attribute="Commenttmpl" lineEndContext="#stay"> <DetectSpaces/> <DetectIdentifier/> <StringDetect attribute="Commenttmpl" context="#pop" String="%>" endRegion="commenttmpl" /> </context> <context name="CDATA" attribute="Other Text" lineEndContext="#stay"> <DetectSpaces/> <DetectIdentifier/> <StringDetect attribute="CDATA" context="#pop" String="]]>" endRegion="cdata" /> <StringDetect attribute="EntityRef" context="#stay" String="]]&gt;" /> </context> <context name="PI" attribute="Other Text" lineEndContext="#stay"> <Detect2Chars attribute="Processing Instruction" context="#pop" char="?" char1=">" endRegion="pi" /> </context> <context name="Doctype" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Doctype" context="#pop" char=">" endRegion="doctype" /> <DetectChar attribute="Doctype" context="Doctype Internal Subset" char="[" beginRegion="int_subset" /> </context> <context name="Doctype Internal Subset" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Doctype" context="#pop" char="]" endRegion="int_subset" /> <IncludeRules context="FindDTDRules" /> <StringDetect attribute="Comment" context="Comment" String="<!--" beginRegion="comment" /> <RegExpr attribute="Processing Instruction" context="PI" String="<\?[\w:-]*" beginRegion="pi" /> <IncludeRules context="FindPEntityRefs" /> </context> <context name="Doctype Markupdecl" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Doctype" context="#pop" char=">" /> <DetectChar attribute="Value" context="Doctype Markupdecl DQ" char=""" /> <DetectChar attribute="Value" context="Doctype Markupdecl SQ" char="'" /> </context> <context name="Doctype Markupdecl DQ" attribute="Value" lineEndContext="#stay"> <DetectChar attribute="Value" context="#pop" char=""" /> <IncludeRules context="FindPEntityRefs" /> </context> <context name="Doctype Markupdecl SQ" attribute="Value" lineEndContext="#stay"> <DetectChar attribute="Value" context="#pop" char="'" /> <IncludeRules context="FindPEntityRefs" /> </context> <context name="El Open" attribute="Other Text" lineEndContext="#stay"> <Detect2Chars attribute="Element" context="#pop" char="/" char1=">" /> <DetectChar attribute="Element" context="#pop" char=">" /> <IncludeRules context="FindAttributes" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="El Close" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Element" context="#pop" char=">" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="El Close 2" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Element" context="#pop#pop#pop" char=">" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="El Close 3" attribute="Other Text" lineEndContext="#stay"> <DetectChar attribute="Element" context="#pop#pop#pop#pop" char=">" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="CSS" attribute="Other Text" lineEndContext="#stay"> <Detect2Chars attribute="Element" context="#pop" char="/" char1=">" endRegion="style" /> <DetectChar attribute="Element" context="CSS content" char=">" /> <IncludeRules context="FindAttributes" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="CSS content" attribute="Other Text" lineEndContext="#stay"> <RegExpr attribute="Element" context="El Close 2" String="</style\b" insensitive="TRUE" endRegion="style" /> <IncludeRules context="##CSS" includeAttrib="true"/> </context> <context name="JS" attribute="Other Text" lineEndContext="#stay"> <Detect2Chars attribute="Element" context="#pop" char="/" char1=">" endRegion="script" /> <DetectChar attribute="Element" context="JS content" char=">" /> <IncludeRules context="FindAttributes" /> <RegExpr attribute="Error" context="#stay" String="\S" /> </context> <context name="JS content" attribute="Other Text" lineEndContext="#stay"> <RegExpr attribute="Element" context="El Close 2" String="</script\b" insensitive="TRUE" endRegion="script" /> <RegExpr attribute="Comment" context="JS comment close" String="//(?=.*</script\b)" insensitive="TRUE" /> <IncludeRules context="##JavaScript" includeAttrib="true"/> </context> <context name="JS comment close" attribute="Comment" lineEndContext="#pop"> <RegExpr attribute="Element" context="El Close 3" String="</script\b" insensitive="TRUE" endRegion="script" /> <IncludeRules context="##Alerts" /> </context> <context name="Value" attribute="Other Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="Value NQ"> <DetectChar attribute="Value" context="Value DQ" char=""" /> <DetectChar attribute="Value" context="Value SQ" char="'" /> <DetectSpaces /> </context> <context name="Value NQ" attribute="Other Text" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop"> <IncludeRules context="FindEntityRefs" /> <RegExpr attribute="Value" context="#stay" String="/(?!>)" /> <RegExpr attribute="Value" context="#stay" String="[^/><"'\s]" /> </context> <context name="Value DQ" attribute="Value" lineEndContext="#stay"> <DetectChar attribute="Value" context="#pop#pop" char=""" /> <IncludeRules context="FindEntityRefs" /> </context> <context name="Value SQ" attribute="Value" lineEndContext="#stay"> <DetectChar attribute="Value" context="#pop#pop" char="'" /> <IncludeRules context="FindEntityRefs" /> </context> </contexts> <itemDatas> <itemData name="Normal Text" defStyleNum="dsNormal" /> <itemData name="Other Text" defStyleNum="dsNormal" spellChecking="false" /> <itemData name="Comment" defStyleNum="dsComment" /> <itemData name="Commenttmpl" defStyleNum="dsComment" color="#66f" /> <itemData name="CDATA" defStyleNum="dsBaseN" bold="1" spellChecking="false" /> <itemData name="Processing Instruction" defStyleNum="dsKeyword" spellChecking="false" /> <itemData name="Doctype" defStyleNum="dsDataType" bold="1" spellChecking="false" /> <itemData name="Element" defStyleNum="dsKeyword" spellChecking="false" /> <itemData name="Attribute" defStyleNum="dsOthers" spellChecking="false" /> <itemData name="Value" defStyleNum="dsString" color="#a00" spellChecking="false" /> <itemData name="EntityRef" defStyleNum="dsDecVal" spellChecking="false" /> <itemData name="PEntityRef" defStyleNum="dsDecVal" spellChecking="false" /> <itemData name="Error" defStyleNum="dsError" spellChecking="false" /> </itemDatas> </highlighting> <general> <comments> <comment name="multiLine" start="<!--" end="-->" /> </comments> </general> </language>
      
      









рдЕрдм рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП:



 LIBS += -L/usr/local/lib/ -lbooster -lcppcms INCLUDEPATH += /usr/local/include DEPENDPATH += /usr/local/include
      
      







Main.cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рднрд░реЗрдВ:



 #include <cppcms/applications_pool.h> #include <cppcms/url_dispatcher.h> #include <cppcms/http_response.h> #include <cppcms/application.h> #include <cppcms/url_mapper.h> #include <cppcms/service.h> //------------------------------------------------------------------------------------- // Dsc:    ,      //       //------------------------------------------------------------------------------------- class WebSite : public cppcms::application{ public: //------------------------------------------------------------------------------------- // Dsc: ,        //------------------------------------------------------------------------------------- WebSite(cppcms::service &s) : cppcms::application(s) {} //------------------------------------------------------------------------------------- // Dsc:     ,       // (    ) //------------------------------------------------------------------------------------- virtual void main(std::string path) { response().out() << "Hello!"; } }; //------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------- int main(int argc,char **argv) { try { //   cppcms::service srv(argc,argv); //   srv.applications_pool().mount(cppcms::applications_factory<WebSite>()); //  srv.run(); } catch(std::exception const &e) { std::cerr << "Failed: " << e.what() << std::endl; std::cerr << booster::trace(e) << std::endl; return 1; } return 0; }
      
      







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

WebApp.bin -c config.json





рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

 { "WebSite" : { "root" : "", "host" : "localhost:8080", "locdomain" : "localhost", }, "service" : { "ip" : "0.0.0.0", "api" : "http", "port" : 8080 }, "http" : { "script" : "/mb.fcgi" , "rewrite" : [ { "regex" : ".*" , "pattern" : "/mb.fcgi$0" } ], } }
      
      





рдЗрддрдирд╛ рдХрд╛рдлреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕" рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ

рдЗрд╕рд▓рд┐рдП, рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ рдФрд░ рдЦреЛрд▓реЗрдВред



рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА? рдирд╣реАрдВ?

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



рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рдЪрд▓реЛ рдкрд╣рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдПрдХ * .cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ "рдЪрд╛рд▓реВ" рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбрд╛рдпрдирд╛рдорд┐рдХ рдбреЗрдЯрд╛ (рдЯреЗрдореНрдкрд▓реЗрдЯ рдбреЗрдЯрд╛) рдХреА рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

data / tmpl_master.h

 #ifndef TMPL_MASTER_H #define TMPL_MASTER_H #include <cppcms/view.h> namespace Data { //------------------------------------------------------------------------------------- // Dsc:      //------------------------------------------------------------------------------------- struct infoPage { std::string title; //   std::string description; //   std::string keywords; //    std::map<std::string,std::string> menuList; //     (url,desc) //------------------------------------------------------------------------------------- // Dsc: ,   //------------------------------------------------------------------------------------- infoPage() : title (""), description(""), keywords (""), menuList ( ) {} //------------------------------------------------------------------------------------- // Dsc: ,    //------------------------------------------------------------------------------------- ~infoPage(){} }; //------------------------------------------------------------------------------------- // Dsc:        //------------------------------------------------------------------------------------- struct Master :public cppcms::base_content { infoPage page; //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- Master() : page() {} //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- ~Master(){} }; } #endif
      
      







рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдорд╛рд░реНрдЯ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдХрдВрдЯреЗрдирд░ рд╣реЛрддреЗ рд╣реИрдВред



рдЪрд▓рд┐рдП рдЦреБрдж рд╣реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдорд╛рд╕реНрдЯрд░.рдордкреНрд▓ рдлрд╝рд╛рдЗрд▓, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде:

 <% c++ #include "data/tmpl_master.h" %> <% skin defskin %> <% view Master uses Data::Master %> <% template page_main() %>MAIN TEMPLATE<% end %> <% template page_footer() %>  <% end %> <% template page_left_sidebar() %> <% end %> <% template render() %> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title><%= page.title %></title> <meta name="keywords" content="<%= page.keywords %>" /> <meta name="description" content="<%= page.description %>" /> <link href="/media/css/style.css" rel="stylesheet"> </head> <body> <div class="wrapper"> <header class="header"> <div class="nav" > <% foreach menuItem in page.menuList %> <ul> <% item %> <li><a href="<%= menuItem.first %>"><%= menuItem.second %></a></li> <% end %> </ul> <% end %> </div> </header> <div class="middle"> <div class="container"> <main class="content"><% include page_main() %></main> </div> <aside class="left-sidebar"> <div> <% include page_left_sidebar() %> </div> </aside> </div> </div> <footer class="footer"><% include page_footer() %></footer> </body> </html> <% end template %> <% end view %> <% end skin %>
      
      





рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ?

рдмрд╣реБрдд рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ <% c++ #include "data/tmpl_master.h" %>



рд╣рдо рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред

рд▓рд╛рдЗрди <% skin defskin %>



рд╡рд░реНрддрдорд╛рди рддреНрд╡рдЪрд╛ рдХреЗ рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЗрдЯ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рд╛рдЗрди <% view Master uses Data::Master %>



рд╡рд░реНрддрдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдирд╛рдо "рдорд╛рд╕реНрдЯрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдкреГрд╖реНрда рднрд░рдиреЗ рдХреЗ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВрдЧреЗ), рдФрд░ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ :: рдорд╛рд╕реНрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рднреА рдмрдирд╛рддреЗ рд╣реИрдВред C ++ рдореЗрдВ рдХреМрди рд╕рд╛ рдЕрдиреБрд╡рд╛рдж тАЬрдбреЗрдЯрд╛ :: рдорд╛рд╕реНрдЯрд░ рд╕рдВрджрд░реНрднтАЭ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ (рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)

рд▓рд╛рдЗрдиреНрд╕ <% template page_main() %>MAIN TEMPLATE<% end %>

<% template page_footer() %> <% end %>

<% template page_left_sidebar() %> <% end %>




<% template page_main() %>MAIN TEMPLATE<% end %>

<% template page_footer() %> <% end %>

<% template page_left_sidebar() %> <% end %>






рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВрдЧреЗ рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рддред
 virtual const char* page_main(){ return "MAIN TEMPLATE"; }
      
      



, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред )ред

рдЪрд▓реЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ C ++ рдХрдВрдкрд╛рдЗрд▓рд░ tmpl рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдЧрд▓реЗрдЧрд╛ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдлрд╝рд╛рдЗрд▓ "make_templates.sh" рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдЙрди рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ (рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╛ рддреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдпрд╛ рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ "рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рднрд╛рдЧ" рдореЗрдВ рджрд░реНрдЬ рдХрд░рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 #!/bin/bash INPUT="" OUTPUT="" while getopts ":i:o:" opt; do case $opt in i) INPUT=$OPTARG ;; o) OUTPUT=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done #       cp $INPUT/config.json $OUTPUT #     TEMPLATES="$INPUT/templates/master.tmpl" #    - cppcms_tmpl_cc $TEMPLATES -o $INPUT/all_tmpl.cpp #     g++ -shared -fPIC $INPUT/all_tmpl.cpp -o $OUTPUT/libcpp_defskin.so -lcppcms -lbooster
      
      







рдЕрдм QtCreator рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЖрдкрдХреЛ "рдХрд╕реНрдЯрдо рд╕реНрдЯреЗрдк" рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛

рдЖрджреЗрд╢: "./make_templates.sh"

рдХрд╛рд░реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛: "% {sourceDir}"

рдХрдорд╛рдВрдб рддрд░реНрдХ: "-i% {sourceDir} -o% {buildDir}"

рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп" рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред



рдпрджрд┐ рдЕрд╕реЗрдВрдмрд▓реА рд╕рдлрд▓ рд░рд╣реА, рддреЛ libcpp_defskin.so рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред

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



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрд╛рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрдВ - рдЖрдкрдХреЛ config.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛

 { "WebSite" : { "root" : "", "host" : "localhost:8080", "locdomain" : "localhost", }, "service" : { "ip" : "0.0.0.0", "api" : "http", "port" : 8080 }, "http" : { "script" : "/mb.fcgi" , "rewrite" : [ { "regex" : "/media(/.+)", "pattern" : "$1" }, { "regex" : ".*" , "pattern" : "/mb.fcgi$0" } ], }, "views" : { "default_skin" : "defskin" , "paths" : [ "./" ], "skins" : [ "cpp_defskin" ], }, }
      
      







рдФрд░ main.cpp рдореЗрдВ рдЙрдЪрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:

 #include "data/tmpl_master.h" ... WebSite::main(std::string path) { Data::Master tmpl; tmpl.page.title = path; tmpl.page.description = "description"; tmpl.page.keywords = "keywords"; tmpl.page.menuList.insert(std::pair<std::string,std::string>("/","MAIN")); tmpl.page.menuList.insert(std::pair<std::string,std::string>("/else","ELSE")); render("Master",tmpl); }
      
      







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

Config.json рдореЗрдВ рдПрдХ рдФрд░ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ

  "file_server" : { "enable" : true, "listing" : true, "document_root" : "./media" },
      
      





рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЦрдВрдб рдХреЗ рд╕рд╛рде рд╣рдо рдмрд╛рдЗрдирд░реА рдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдФрд░ рдЬрд┐рд╕ рдирд┐рдпрдо рд╕реЗ рд╡рд╣ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЕрдиреБрднрд╛рдЧ http { "regex" : "/media(/.+)", "pattern" : "$1" },



рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ

рдпрд╣ рд╣реИ, / рдореАрдбрд┐рдпрд╛ / рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЛ "рдлрд╝рд╛рдЗрд▓ рд╕рд░реНрд╡рд░" рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореАрдбрд┐рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдФрд░ make_templates.sh рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдЯрдо рднреА рдЬреЛрдбрд╝реЗрдВ:

 #       cp -R $INPUT/media $OUTPUT
      
      





рдореАрдбрд┐рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЛрд░реНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ), css рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдФрд░ рдЗрд╕рдореЗрдВ style.css рдлрд╝рд╛рдЗрд▓

рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 /* Eric Meyer's CSS Reset */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } /* End of Eric Meyer's CSS Reset */ html { height: 100%; } article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } body { font: 12px/18px Arial, sans-serif; width: 100%; height: 100%; } .wrapper { width: 800px; margin: 0 auto; min-height: 100%; height: auto !important; height: 100%; } /* Header -----------------------------------------------------------------------------*/ .header { height: 50px; background: #FFE680; } /* Middle -----------------------------------------------------------------------------*/ .middle { width: 100%; padding: 0 0 50px; position: relative; } .middle:after { display: table; clear: both; content: ''; } .container { width: 100%; float: left; overflow: hidden; } .content { padding: 0 270px 0 270px; } /* Left Sidebar -----------------------------------------------------------------------------*/ .left-sidebar { float: left; width: 250px; margin-left: -100%; position: relative; background: #B5E3FF; } /* Footer -----------------------------------------------------------------------------*/ .footer { width: 800px; margin: -50px auto 0; height: 50px; background: #BFF08E; position: relative; }
      
      







рд╣рдо рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рдЪреВрдВрдХрд┐ рд╕рд╛рдЗрдЯ рдиреМрд╕рд┐рдЦрд┐рдП рдорд╛рд╕реНрдЯрд░ рдХреЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХреЗ рд╕рдорд╛рди рд╣реИ - рдЖрдк рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕



рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рддрдВрддреНрд░ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ tmpl_news.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ

 #ifndef TMPL_NEWS_H #define TMPL_NEWS_H #include "tmpl_master.h" namespace Data { //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- struct News :public Master{ //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- std::string mainNews; //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- News() : Master() {} //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- ~News(){} }; } #endif // TMPL_NEWS_H
      
      







рд╕рд╛рде рд╣реА news.tmpl рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

 <% c++ #include "data/tmpl_news.h" %> <% skin defskin %> <% view News uses Data::News extends Master %> <% template page_main() %><%= mainNews %><% end %> <% end view %> <% end skin %>
      
      





рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрде рдЬреЛрдбрд╝реЗрдВ (рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП):



 TEMPLATES="$INPUT/templates/master.tmpl" TEMPLATES="$TEMPLATES $INPUT/templates/news.tmpl"
      
      







Main.cpp рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ

 #include <cppcms/applications_pool.h> #include <cppcms/url_dispatcher.h> #include <cppcms/http_response.h> #include <cppcms/application.h> #include <cppcms/url_mapper.h> #include <cppcms/service.h> #include "data/tmpl_master.h" #include "data/tmpl_news.h" //------------------------------------------------------------------------------------- // Dsc:    ,      //       //------------------------------------------------------------------------------------- class WebSite : public cppcms::application{ public: //------------------------------------------------------------------------------------- // Dsc: ,        //------------------------------------------------------------------------------------- WebSite(cppcms::service &s) : cppcms::application(s) { dispatcher().assign("/news(.*)",&WebSite::news,this,1); mapper().assign("news","/news"); dispatcher().assign("(/?)",&WebSite::master,this,1); mapper().assign("master","/"); } //------------------------------------------------------------------------------------- // Dsc:     ,       // (    ) //------------------------------------------------------------------------------------- virtual void main(std::string path) { cppcms::application::main(path); } //------------------------------------------------------------------------------------- // Dsc:    //------------------------------------------------------------------------------------- virtual void master(std::string path) { Data::Master tmpl; tmpl.page.title = path; tmpl.page.description = "description"; tmpl.page.keywords = "keywords"; tmpl.page.menuList.insert(std::pair<std::string,std::string>("/","MASTER")); tmpl.page.menuList.insert(std::pair<std::string,std::string>("/news","NEWS")); render("Master",tmpl); } //------------------------------------------------------------------------------------- // Dsc:   //------------------------------------------------------------------------------------- virtual void news(std::string path) { Data::News tmpl; tmpl.page.title = path; tmpl.page.description = "description"; tmpl.page.keywords = "keywords"; tmpl.page.menuList.insert(std::pair<std::string,std::string>("/","MASTER")); tmpl.page.menuList.insert(std::pair<std::string,std::string>("/news","NEWS")); tmpl.mainNews = "!       !"; render("News",tmpl); } }; //------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------- int main(int argc,char **argv) { try { //   cppcms::service srv(argc,argv); //   srv.applications_pool().mount(cppcms::applications_factory<WebSite>()); //  srv.run(); } catch(std::exception const &e) { std::cerr << "Failed: " << e.what() << std::endl; std::cerr << booster::trace(e) << std::endl; return 1; } return 0; } }
      
      





рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╣реБрдЖ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕ рдкреЗрдЬ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЕрдм рдпреЗ рдкреГрд╖реНрда рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╡рд╣ рдХреНрд░рдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИ (рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдмрд╛рдж рд╡рдВрд╢рдЬреЛрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред



рдЗрд╕ рдкрд░, рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред



All Articles