ProcessWire рдореЗрдВ Asyntai AI рдЪреИрдЯрдмреЙрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
ProcessWire CMS рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЧрд╛рдЗрдб
рдЪрд░рдг 1: рдЕрдкрдирд╛ рдПрдореНрдмреЗрдб рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ Asyntai рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдиреАрдЪреЗ "Embed Code" рдЕрдиреБрднрд╛рдЧ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред рдЕрдкрдирд╛ рдпреВрдирд┐рдХ рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЙрдкреА рдХрд░реЗрдВ, рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
<script>(function(){var l=function(){var s=document.createElement("script");s.src="https://widget.asyntai.com/static/js/chat-widget.js";s.async=true;s.setAttribute("data-asyntai-id","YOUR_WIDGET_ID");document.head.appendChild(s)};if(document.readyState==="complete"){l()}else{window.addEventListener("load",l)}})();</script>
рдиреЛрдЯ: рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдирд╛ рдЕрджреНрд╡рд┐рддреАрдп рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рдЬреЗрдЯ ID рд╣реЛрддреА рд╣реИред
рдЪрд░рдг 2: рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдЕрдиреБрд╢рдВрд╕рд┐рдд)
ProcessWire site/templates/ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд PHP рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдореНрдмреЗрдб рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреА рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИ:
- FTP, SSH, рдпрд╛ рдЕрдкрдиреЗ рдлрд╝рд╛рдЗрд▓ рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА ProcessWire рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдБрдЪреЗрдВ
site/templates/рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ- рдЕрдкрдиреА рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ — рдпрд╣ рдЕрдХреНрд╕рд░ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ _main.php рдпрд╛ basic-page.php рд╣реЛрддреА рд╣реИ
- рдпрджрд┐ рдЖрдк delayed output strategy (рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдЗрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ _main.php рдЦреЛрд▓реЗрдВ
- рдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ
</body>рдЯреИрдЧ рдЦреЛрдЬреЗрдВ - рдЗрд╕рдХреЗ рдареАрдХ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ Asyntai рдПрдореНрдмреЗрдб рдХреЛрдб рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:
<script>(function(){var l=function(){var s=document.createElement("script");s.src="https://widget.asyntai.com/static/js/chat-widget.js";s.async=true;s.setAttribute("data-asyntai-id","YOUR_WIDGET_ID");document.head.appendChild(s)};if(document.readyState==="complete"){l()}else{window.addEventListener("load",l)}})();</script>
</body>
рд╕реБрдЭрд╛рд╡: рдХреНрд▓реЛрдЬрд┐рдВрдЧ </body> рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдЦрдиреЗ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЪреИрдЯрдмреЙрдЯ рдкреЗрдЬ рдХрдВрдЯреЗрдВрдЯ рдХреЗ рдмрд╛рдж рд▓реЛрдб рд╣реЛ, рдЬреЛ рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 1: _foot.inc рдпрд╛ _main.php рдПрдкреЗрдВрдб рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдпрджрд┐ рдЖрдкрдХреА ProcessWire рд╕рд╛рдЗрдЯ рдЕрдкреЗрдВрдб рдлрд╝рд╛рдЗрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдХрдИ рд╕рд╛рдЗрдЯ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп), рддреЛ рдЖрдк рд╕рд╛рдЭрд╛ рдлрд╝реБрдЯрд░ рдЗрдиреНрдХреНрд▓реВрдб рдореЗрдВ рдПрдореНрдмреЗрдб рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
site/templates/рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ- _foot.inc (рдпрд╛ рдЕрдкрдиреА рд╕рдордХрдХреНрд╖ рдлрд╝реБрдЯрд░ рдЗрдиреНрдХреНрд▓реВрдб рдлрд╝рд╛рдЗрд▓) рдЦреЛрд▓реЗрдВ
- рдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ
</body>рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЕрдкрдирд╛ Asyntai рдПрдореНрдмреЗрдб рдХреЛрдб рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ - рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ
ProcessWire рдХреА delayed output strategy рдЖрдорддреМрд░ рдкрд░ рддреАрди рдкреНрд░рдореБрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ:
- _init.php — рд╣рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЪрд▓рддрд╛ рд╣реИ, рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ
- рдЖрдкрдХреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ,
basic-page.php) — рдХрдВрдЯреЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рднрд░рддреА рд╣реИ - _main.php — рдЙрди рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд┐рдо HTML рдорд╛рд░реНрдХрдЕрдк рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд╣реИ
рдпрджрд┐ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ </body> рд╕реЗ рдкрд╣рд▓реЗ _main.php рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд░ рдкреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗред
рдиреЛрдЯ: The file names _init.php and _main.php are configured рдЕрдкрдиреЗ site/config.php via the $config->prependTemplateFile and $config->appendTemplateFile settings. Check your config if your files are named differently.
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 2: $config->scripts рдРрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ
ProcessWire provides a $config->scripts FilenameArray that you can use to manage JavaScript files. In your _init.php or individual template file, add:
<?php
$config->scripts->add('https://asyntai.com/static/js/chat-widget.js');
?>
рдлрд┐рд░ рдЕрдкрдиреЗ _main.php (рдпрд╛ рдлрд╝реБрдЯрд░ рдЗрдиреНрдХреНрд▓реВрдб) рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдРрд░реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░реЗрдВ:
<?php foreach($config->scripts as $file): ?>
<script src="<?php echo $file; ?>"></script>
<?php endforeach; ?>
рдорд╣рддреНрд╡рдкреВрд░реНрдг: The $config->scripts approach handles the script src attribute, but the data-asyntai-id attribute needs to be handled separately. You will need to either add the data attribute manually in the loop output, or use the direct script tag method from Step 2 instead for the simplest setup.
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 3: рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ (ready.php)
рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рд░ рдкреЗрдЬ рдореЗрдВ рдЪреИрдЯрдмреЙрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ProcessWire рдХреЗ рд╣реБрдХ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреА site/ready.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
<?php
$wire->addHookAfter('Page::render', function(HookEvent $event) {
$html = $event->return;
$script = '<script>(function(){var l=function(){var s=document.createElement("script");s.src="https://widget.asyntai.com/static/js/chat-widget.js";s.async=true;s.setAttribute("data-asyntai-id","YOUR_WIDGET_ID");document.head.appendChild(s)};if(document.readyState==="complete"){l()}else{window.addEventListener("load",l)}})();</script>';
$html = str_replace('</body>', $script . '</body>', $html);
$event->return = $html;
});
?>
рдпрд╣ рд╣реБрдХ рд╣рд░ рдкреЗрдЬ рдХреЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП HTML рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓реЛрдЬрд┐рдВрдЧ </body> рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Asyntai рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
рд╕реБрдЭрд╛рд╡: рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╣рд░ рдкреЗрдЬ рдкрд░ рдЪреИрдЯрдмреЙрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ ready.php рд╣реБрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрджрд░реНрд╢ рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдФрд░ рдереАрдо рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рднреА рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рддрд╛ рд╣реИред
рдЪрд░рдг 3: рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдпрд╛ рдЗрдирдХреЙрдЧреНрдирд┐рдЯреЛ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЕрдкрдиреА ProcessWire рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдПрдБред рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдЬреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рд╕рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬ рд▓рд┐рдпрд╛ рд╣реИред рдЕрдкрдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдпрд╛ рдЗрдирдХреЙрдЧреНрдирд┐рдЯреЛ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ ProcessWire рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреИрд╢ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдЖрдкрдХреЛ Modules → Core → Template Engine Cache рдкрд░ рдЬрд╛рдХрд░ рдпрд╛ рдЕрдкрдиреЗ URL рдореЗрдВ ?nocache=1 рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рднреА рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдкреЗрдЬреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред
Weebly