SilverStripe рдореЗрдВ Asyntai AI рдЪреИрдЯрдмреЙрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
SilverStripe 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: SilverStripe рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ (рдЕрдиреБрд╢рдВрд╕рд┐рдд)
рдЕрдкрдиреА SilverStripe рд╕рд╛рдЗрдЯ рдкрд░ рдЪреИрдЯрдмреЙрдЯ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдЕрдкрдиреА рдереАрдо рдХреА рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реАрдзреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИ:
- рдЕрдкрдиреА рдереАрдо рдХреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ (рдЬреИрд╕реЗ, themes/yourtheme/templates/Page.ss)
- рдХреНрд▓реЛрдЬрд┐рдВрдЧ </body> рдЯреИрдЧ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдПрдореНрдмреЗрдб рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
<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>
</html>
- рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рд╛рдЗрдЯ URL рдХреЗ рдЕрдВрдд рдореЗрдВ ?flush=1 рдЬреЛрдбрд╝рдХрд░ SilverStripe рдХреИрд╢ рдХреЛ рдлреНрд▓рд╢ рдХрд░реЗрдВ
рд╕реБрдЭрд╛рд╡: SilverStripe рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде .ss рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдкрдиреЗ рдмреЗрд╕ Page.ss рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЪреИрдЯрдмреЙрдЯ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЗ рд╣рд░ рдкреЗрдЬ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗред рдпрджрд┐ рдЖрдкрдХреА рдереАрдо Includes рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рд╕рд╛рдЭрд╛ рдЗрдВрдХреНрд▓реВрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 1: рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ Requirements рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ
SilverStripe рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ CSS рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Requirements рдХреНрд▓рд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ:
- app/src/PageController.php (рдпрд╛ рдЕрдкрдиреА рдкреЗрдЬ рдХрдВрдЯреНрд░реЛрд▓рд░ рдлрд╝рд╛рдЗрд▓) рдЦреЛрд▓реЗрдВ
- init() рдореЗрдердб рдореЗрдВ, рд╡рд┐рдЬреЗрдЯ рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Requirements::customScript() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
use SilverStripe\View\Requirements;
class PageController extends \SilverStripe\CMS\Controllers\ContentController
{
protected function init()
{
parent::init();
Requirements::customScript(<<<JS
var script = document.createElement('script');
script.src = 'https://asyntai.com/static/js/chat-widget.js';
script.setAttribute('data-asyntai-id', 'YOUR_WIDGET_ID');
script.async = true;
document.head.appendChild(script);
JS);
}
}
- рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ yourdomain.com?flush=1 рдкрд░ рдЬрд╛рдХрд░ рдХреИрд╢ рдлреНрд▓рд╢ рдХрд░реЗрдВ
рдиреЛрдЯ: Requirements рдХреНрд▓рд╛рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ SilverStripe-рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИред Requirements::customScript() рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдЖрдкрдХреЗ PageController рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдкреЗрдЬ рдкрд░ рд▓реЛрдб рд╣реЛред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 2: рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ Requirements рдХрд╛ рдЙрдкрдпреЛрдЧ
рдЖрдк рдЕрдкрдиреА .ss рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реАрдзреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП SilverStripe рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЕрдкрдиреА рдереАрдо рдХреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ (рдЬреИрд╕реЗ, themes/yourtheme/templates/Page.ss)
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдиреАрдЪреЗ, </body> рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
<% require javascript("https://asyntai.com/static/js/chat-widget.js") %>
<script>
document.addEventListener('DOMContentLoaded', function() {
var scripts = document.querySelectorAll('script[src*="chat-widget.js"]');
scripts.forEach(function(s) {
s.setAttribute('data-asyntai-id', 'YOUR_WIDGET_ID');
});
});
</script>
</body>
рд╕реБрдЭрд╛рд╡: <% require %> рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрд╕реЗрдЯреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ SilverStripe рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ-рд╕реНрддрд░реАрдп рддрд░реАрдХрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдореЗрдВ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреЗрд╢рди рд╕реНрдирд┐рдкреЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ 3: SilverStripe рдХреЙрдиреНрдлрд╝рд┐рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ (YAML)
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рд╕рдВрдЪрд╛рд▓рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЧреНрд▓реЛрдмрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП SilverStripe рдХреЗ YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- app/_config/app.yml рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдпрд╛ рдмрдирд╛рдПрдБ
- рдХрд╕реНрдЯрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдпрд╛ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗрдЯрдЕрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВ:
# app/_config/app.yml
---
Name: asyntai-chatbot
After: '#rootroutes'
---
SilverStripe\Core\Injector\Injector:
AsyntaiChatbotExtension:
class: App\Extensions\AsyntaiChatbotExtension
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рд╛рдЗрд▓ app/src/Extensions/AsyntaiChatbotExtension.php рдмрдирд╛рдПрдБ:
namespace App\Extensions;
use SilverStripe\Core\Extension;
use SilverStripe\View\Requirements;
class AsyntaiChatbotExtension extends Extension
{
public function onAfterInit()
{
Requirements::customScript("
var script = document.createElement('script');
script.src = 'https://asyntai.com/static/js/chat-widget.js';
script.setAttribute('data-asyntai-id', 'YOUR_WIDGET_ID');
script.async = true;
document.head.appendChild(script);
");
}
}
- app/_config/app.yml рдореЗрдВ рдЕрдкрдиреЗ PageController рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
PageController:
extensions:
- App\Extensions\AsyntaiChatbotExtension
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреИрд╢ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ?flush=1 рдЪрд▓рд╛рдПрдБ
рдиреЛрдЯ: YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдореЙрдбреНрдпреВрд▓рд░ SilverStripe рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдЪреИрдЯрдмреЙрдЯ рдПрдХреАрдХрд░рдг рдХреЛ рдЖрдкрдХреЗ рдореБрдЦреНрдп рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдЕрд▓рдЧ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдмрджрд▓реЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдЪрд░рдг 3: рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ
рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдФрд░ SilverStripe рдХреИрд╢ рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдореЗрдВ рдЦреЛрд▓реЗрдВред рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рд╡рд┐рдЬреЗрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рд╛рдЗрдЯ URL рдХреЗ рдЕрдВрдд рдореЗрдВ ?flush=1 рдЬреЛрдбрд╝рдХрд░ рдХреИрд╢ рдлреНрд▓рд╢ рдХрд┐рдпрд╛ рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЖрдкрдиреЗ YOUR_WIDGET_ID рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рд╕реЗ рдЕрдкрдиреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЬреЗрдЯ рдЖрдИрдбреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ рдпрд╛ рдЗрдирдХреЙрдЧреНрдирд┐рдЯреЛ рдореЛрдб рдореЗрдВ рджреЗрдЦреЗрдВред рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ (F12) рдЦреЛрд▓реЗрдВред рдпрджрд┐ Requirements рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ PageController рдХрд╛ init() рдореЗрдердб рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
Weebly