{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Чуденкова Алексея, заметки с тегом: simplacms",
    "home_page_url": "https:\/\/blog.chudenkov.ru\/tags\/simplacms\/",
    "feed_url": "https:\/\/blog.chudenkov.ru\/tags\/simplacms\/json\/",
    "icon": "https:\/\/blog.chudenkov.ru\/user\/userpic@2x.jpg",
    "author": {
        "name": "Чуденков Алексей",
        "url": "https:\/\/blog.chudenkov.ru\/",
        "avatar": "https:\/\/blog.chudenkov.ru\/user\/userpic@2x.jpg"
    },
    "items": [
        {
            "id": "68",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-podschyot-kolichestva-vvedyonnyh-simvolov-v-polya-seo\/",
            "title": "SimplaCMS: Подсчёт количества введённых символов в поля SEO-параметров",
            "content_html": "<p>Сеошники знают, что есть правила, которые ограничивают нам ввод длинных title или description. Чтобы не кидать каждый раз в Sublime для подсчёта символов, я набросал простенький скрипт, который показывает текущее значение каждого поля SEO-параметров.<\/p>\n<p>Потестить можно на категориях, для которых в первую очередь и писался сам скрипт. Для этого откроем \/simpla\/design\/html\/category.tpl и заменим блок<\/p>\n<!-- Параметры страницы --><p>на код ниже:<\/p>\n<pre class=\"e2-text-code\"><code>&lt;div class=&quot;block layer&quot;&gt;\r\n&lt;h2&gt;Параметры страницы&lt;\/h2&gt;\r\n&lt;ul&gt;\r\n\t&lt;li&gt;&lt;label id=&quot;url_count&quot;class=property&gt;Адрес&lt;\/label&gt;&lt;div class=&quot;page_url&quot;&gt;\/catalog\/&lt;\/div&gt;&lt;input name=&quot;url&quot; class=&quot;page_url&quot; type=&quot;text&quot; value=&quot;{$category-&gt;url|escape}&quot; id=&quot;url_source&quot; \/&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;label id=&quot;title_count&quot; class=property&gt;Заголовок&lt;\/label&gt;&lt;input name=&quot;meta_title&quot; class=&quot;simpla_inp&quot; type=&quot;text&quot; value=&quot;{$category-&gt;meta_title|escape}&quot; id=&quot;title_source&quot; \/&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;label id=&quot;keys_count&quot; class=property&gt;Ключевые слова&lt;\/label&gt;&lt;input name=&quot;meta_keywords&quot; class=&quot;simpla_inp&quot; type=&quot;text&quot; value=&quot;{$category-&gt;meta_keywords|escape}&quot; id=&quot;keys_source&quot; \/&gt;&lt;\/li&gt;\r\n\t&lt;li&gt;&lt;label id=&quot;description_count&quot; class=property&gt;Описание&lt;\/label&gt;&lt;textarea name=&quot;meta_description&quot; class=&quot;simpla_inp&quot; id=&quot;description_source&quot; &gt;{$category-&gt;meta_description|escape}&lt;\/textarea&gt;&lt;\/li&gt;\r\n\t\t\t&lt;\/ul&gt;\r\n&lt;script&gt;\r\nvar urlname = document.getElementById(&quot;url_source&quot;);\r\nvar urlcount = document.getElementById(&quot;url_count&quot;);\r\nvar titlename = document.getElementById(&quot;title_source&quot;);\r\nvar titlecount = document.getElementById(&quot;title_count&quot;);\r\nvar keywordname = document.getElementById(&quot;keys_source&quot;);\r\nvar keywordscount = document.getElementById(&quot;keys_count&quot;); \r\nvar descriptionname = document.getElementById(&quot;description_source&quot;);\r\nvar descriptioncount = document.getElementById(&quot;description_count&quot;);                                   \r\nwindow.onload = urlCount();\r\nwindow.onload = titleCount();\r\nwindow.onload = keywordsCount();\r\nwindow.onload = descriptionCount();\r\nurlname.oninput = urlCount;\r\ntitlename.oninput = titleCount;\r\nkeywordname.oninput = keywordsCount;\r\ndescriptionname.oninput = descriptionCount;                  \r\nfunction urlCount() {\r\nvar x = urlname.value;\r\nurlcount.innerHTML = &quot;Адрес (&quot; + x.length + &quot;)&quot;;\r\n}             \r\nfunction titleCount() {\r\nvar y = titlename.value;\r\ntitlecount.innerHTML = &quot;Заголовок (&quot; + y.length + &quot;)&quot;;\r\n}                  \r\nfunction keywordsCount() {\r\nvar z = keywordname.value;\r\nkeywordscount.innerHTML = &quot;Ключевые слова (&quot; + z.length + &quot;)&quot;;\r\n}\r\nfunction descriptionCount() {\r\nvar xx = descriptionname.value;\r\ndescriptioncount.textContent = &quot;Описание (&quot; + xx.length + &quot;)&quot;;\r\n}                 \r\n&lt;\/script&gt;\r\n&lt;\/div&gt;<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2.png\" width=\"1185\" height=\"489\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2020-01-14T13:58:34+03:00",
            "date_modified": "2020-01-14T14:01:34+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2.png",
            "_date_published_rfc2822": "Tue, 14 Jan 2020 13:58:34 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "68",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2.png"
                ]
            }
        },
        {
            "id": "66",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-rezhim-raboty\/",
            "title": "SimplaCMS: режим работы",
            "content_html": "<p>У некоторых компаний есть клиенты, которые не могут долистать до страницы контакты и посмотреть режим работы. Специально для таких особей в шапку написал скрипт, который в зависимости от дня показывает определённое время работы компании.<\/p>\n<pre class=\"e2-text-code\"><code>{assign var=workdays value='Работаем: с 10:00 до 20:00'}\r\n{assign var=saturday value='Суббота: с 10:00 до 16:00'}\r\n{assign var=holiday value='Воскресенье: не работаем'}\r\n\r\n{if $smarty.now|date_format:'%w' == '1' || $smarty.now|date_format:'%w' == '2' || $smarty.now|date_format:'%w' == '3' || $smarty.now|date_format:'%w' == '4' || $smarty.now|date_format:'%w' == '5'}{$workdays}{elseif $smarty.now|date_format:'%w' == '6'}{$saturday}{else}{$holiday}{\/if}<\/code><\/pre><p>С понедельника по пятницу будет отображаться режим работы с 10 до 20 часов.<br \/>\nВ субботу — с 10 до 16 часов.<br \/>\nВ воскресенье — не работаем.<\/p>\n",
            "date_published": "2019-11-09T12:06:32+03:00",
            "date_modified": "2019-11-09T12:17:06+03:00",
            "_date_published_rfc2822": "Sat, 09 Nov 2019 12:06:32 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "66",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "61",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-vyvod-zakupochnoy-ceny\/",
            "title": "SimplaCMS: вывод закупочной цены",
            "content_html": "<p>Потребовалось сделать вывод закупочной цены в админке. Итак, сначала добавим поля в шаблон в админке.<\/p>\n<ol start=\"1\">\n<li>Откроем \/simpla\/design\/html\/product.tpl и добавим колонки Закупка и Прибыль для вариантов товаров:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>&lt;li class=&quot;variant_move&quot;&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_name&quot;&gt;Название варианта&lt;\/li&gt;\t\r\n&lt;li class=&quot;variant_sku&quot;&gt;Артикул&lt;\/li&gt;\r\n&lt;li class=&quot;variant_fprice&quot;&gt;Закупка, {$currency-&gt;sign}&lt;\/li&gt;\t\r\n&lt;li class=&quot;variant_price&quot;&gt;Цена, {$currency-&gt;sign}&lt;\/li&gt;\t\r\n&lt;li class=&quot;variant_discount&quot;&gt;Старая, {$currency-&gt;sign}&lt;\/li&gt;\t\r\n&lt;li class=&quot;variant_amount&quot;&gt;Кол-во&lt;\/li&gt;\r\n&lt;li&gt;&lt;\/li&gt;\r\n&lt;li&gt;Прибыль&lt;\/li&gt;<\/code><\/pre><ol start=\"2\">\n<li>Далее добавим поля для указания данных в цикл $product_variants:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>&lt;li class=&quot;variant_move&quot;&gt;&lt;div class=&quot;move_zone&quot;&gt;&lt;\/div&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_name&quot;&gt;      &lt;input name=&quot;variants[id][]&quot;            type=&quot;hidden&quot; value=&quot;{$variant-&gt;id|escape}&quot; \/&gt;&lt;input name=&quot;variants[name][]&quot; type=&quot;&quot; value=&quot;{$variant-&gt;name|escape}&quot; \/&gt; &lt;a class=&quot;del_variant&quot; href=&quot;&quot;&gt;&lt;img src=&quot;design\/images\/cross-circle-frame.png&quot; alt=&quot;&quot; \/&gt;&lt;\/a&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_sku&quot;&gt;       &lt;input name=&quot;variants[sku][]&quot;           type=&quot;text&quot;   value=&quot;{$variant-&gt;sku|escape}&quot; \/&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_fprice&quot;&gt;     &lt;input name=&quot;variants[fprice][]&quot;         type=&quot;text&quot;   value=&quot;{$variant-&gt;fprice|escape}&quot; \/&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_price&quot;&gt;     &lt;input name=&quot;variants[price][]&quot;         type=&quot;text&quot;   value=&quot;{$variant-&gt;price|escape}&quot; \/&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_discount&quot;&gt;  &lt;input name=&quot;variants[compare_price][]&quot; type=&quot;text&quot;   value=&quot;{$variant-&gt;compare_price|escape}&quot; \/&gt;&lt;\/li&gt;\r\n&lt;li class=&quot;variant_amount&quot;&gt;    &lt;input name=&quot;variants[stock][]&quot;         type=&quot;text&quot;   value=&quot;{if $variant-&gt;infinity || $variant-&gt;stock == ''}∞{else}{$variant-&gt;stock|escape}{\/if}&quot; \/&gt;{$settings-&gt;units}&lt;\/li&gt;\r\n&lt;li&gt;{if $variant-&gt;fprice} +{math equation = $variant-&gt;price - $variant-&gt;fprice} {$currency-&gt;sign}{\/if}&lt;\/li&gt;<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_4-1.jpg\" width=\"934\" height=\"338\" alt=\"\" \/>\n<\/div>\n<ol start=\"3\">\n<li>Теперь добавим отображение закупки в список товаров, для этого откроем файл \/simpla\/design\/html\/products.tpl и добавим в цикл $product_variants:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>&lt;li {if !$variant@first}class=&quot;variant&quot; style=&quot;display:none;&quot;{\/if}&gt;\r\n\t&lt;i title=&quot;{$variant-&gt;name|escape}&quot;&gt;{$variant-&gt;name|escape|truncate:30:'…':true:true}&lt;\/i&gt;\r\n\t&lt;input class=&quot;fprice&quot; type=&quot;text&quot; name=&quot;fprice[{$variant-&gt;id}]&quot; value=&quot;{$variant-&gt;fprice}&quot; \/&gt;\r\n\t&lt;input class=&quot;price {if $variant-&gt;compare_price&gt;0}compare_price{\/if}&quot; type=&quot;text&quot; name=&quot;price[{$variant-&gt;id}]&quot; value=&quot;{$variant-&gt;price}&quot; {if $variant-&gt;compare_price&gt;0}title=&quot;Старая цена &amp;mdash; {$variant-&gt;compare_price} {$currency-&gt;sign}&quot;{\/if} \/&gt;{$currency-&gt;sign}  \r\n\t&lt;input class=&quot;stock&quot; type=&quot;text&quot; name=&quot;stock[{$variant-&gt;id}]&quot; value=&quot;{if $variant-&gt;infinity}∞{else}{$variant-&gt;stock}{\/if}&quot; \/&gt;{$settings-&gt;units}\r\n&lt;\/li&gt;<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_5-1.jpg\" width=\"1275\" height=\"475\" alt=\"\" \/>\n<\/div>\n<ol start=\"4\">\n<li>Отображение сделали, теперь нужно поработать над функционалом. Откроем файл \/api\/Variants.php и обновим в двух местах SQL-запрос для функции get_variants:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>$query = $this-&gt;db-&gt;placehold(&quot;SELECT v.id, v.product_id , v.price, v.fprice, NULLIF(v.compare_price, 0) as compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.name, v.attachment, v.position<\/code><\/pre><ol start=\"5\">\n<li>Теперь откроем файл \/simpla\/ProductsAdmin.php и добавим возможность управления закупочной ценой на списке товаров:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>\/\/ Обработка действий \t\r\nif($this-&gt;request-&gt;method('post'))\r\n{\r\n\/\/ Сохранение цен и наличия\r\n$prices = $this-&gt;request-&gt;post('price');\r\n$fprices = $this-&gt;request-&gt;post('fprice');\r\n$stocks = $this-&gt;request-&gt;post('stock'); \r\n\t\t    foreach($fprices as $id=&gt;$fprice)\r\n{\r\n\t$this-&gt;variants-&gt;update_variant($id, array('fprice'=&gt;$fprice));\r\n}\r\nforeach($prices as $id=&gt;$price)\r\n{\r\n\t$stock = $stocks[$id];\r\n\tif($stock == '∞' || $stock == '')\r\n\t$stock = null;\r\n\t$this-&gt;variants-&gt;update_variant($id, array('price'=&gt;$price, 'stock'=&gt;$stock));\r\n}<\/code><\/pre>",
            "date_published": "2019-05-31T22:04:57+03:00",
            "date_modified": "2019-05-31T22:04:45+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_4-1.jpg",
            "_date_published_rfc2822": "Fri, 31 May 2019 22:04:57 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "61",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_4-1.jpg",
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_5-1.jpg"
                ]
            }
        },
        {
            "id": "59",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-podklyuchaem-dadata-dlya-klyovyh-podskazok\/",
            "title": "SimplaCMS: подключаем dadata для клёвых подсказок",
            "content_html": "<p>Есть клёвый сервис, который позволяет в вашей корзине вызывать подсказки.<br \/>\nПодсказки могут быть разными — фамилии, имена, отчества, адреса, почты, огрн, инн и ещё большая куча других подсказок. Для простых интернет-магазинов очень нужны ФИО, электропочты и адреса. Это реально упрощает процесс оформления заказа и в какой-то степени увеличивает конверсию.<\/p>\n<h2>Как подключить<\/h2>\n<ol start=\"1\">\n<li>Регистрируемся на сайте dadata.ru, получаем API ключик.<\/li>\n<li>Открываем файл \/design\/ваша_тема\/html\/cart.tpl и добавляем в него:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>{literal}\r\n&lt;link href=&quot;https:\/\/cdn.jsdelivr.net\/npm\/suggestions-jquery@19.4.2\/dist\/css\/suggestions.min.css&quot; rel=&quot;stylesheet&quot; \/&gt;\r\n&lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/suggestions-jquery@19.4.2\/dist\/js\/jquery.suggestions.min.js&quot;&gt;&lt;\/script&gt;\r\n &lt;script type=&quot;text\/javascript&quot;&gt;\r\n     $(&quot;.cart input[name='name']&quot;).suggestions({\r\n         serviceUrl: &quot;https:\/\/dadata.ru\/api\/v2&quot;,\r\n         token: &quot;a8fe6329cfa81666be66deb370d2c364ccfddeaa&quot;,\r\n         type: &quot;NAME&quot;,\r\n         params: {\r\n             parts: [&quot;SURNAME&quot;, &quot;NAME&quot;, &quot;PATRONYMIC&quot;]\r\n         }\r\n     });\r\n     $(&quot;.cart input[name='address']&quot;).suggestions({\r\n         serviceUrl: &quot;https:\/\/dadata.ru\/api\/v2&quot;,\r\n         token: &quot;a8fe6329cfa81666be66deb370d2c364ccfddeaa&quot;,\r\n         type: &quot;ADDRESS&quot;\r\n     });\r\n     $(&quot;.cart input[name='email']&quot;).suggestions({\r\n        serviceUrl: &quot;https:\/\/dadata.ru\/api\/v2&quot;,\r\n        token: &quot;a8fe6329cfa81666be66deb370d2c364ccfddeaa&quot;,\r\n        type: &quot;EMAIL&quot;,\r\n        \/* Вызывается, когда пользователь выбирает одну из подсказок *\/\r\n        onSelect: function(suggestion) {\r\n            console.log(suggestion);\r\n        }\r\n    });\r\n &lt;\/script&gt;\r\n {\/literal}<\/code><\/pre><ol start=\"3\">\n<li>Чтобы скрипт заработал, нужно указать свой API-ключик во всех token-параметрах.<\/li>\n<li>Обратите внимание, что у меня используется нестандартный класс для формы корзины. Чтобы узнать какой класс формы корзины используется у вас, найдите в cart.tpl html-тег <form> и посмотрите какой класс ему принадлежит. Далее просто замените <b>cart<\/b> на свой класс в этих полях:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>$(&quot;.cart input[name='name']&quot;).suggestions({\r\n...\r\n$(&quot;.cart input[name='address']&quot;).suggestions({\r\n...\r\n$(&quot;.cart input[name='email']&quot;).suggestions({\r\n...\r\n}<\/code><\/pre><h2>Результат работы<\/h2>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_3.jpg\" width=\"937\" height=\"673\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2019-05-15T14:10:56+03:00",
            "date_modified": "2019-05-15T14:11:09+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_3.jpg",
            "_date_published_rfc2822": "Wed, 15 May 2019 14:10:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "59",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_3.jpg"
                ]
            }
        },
        {
            "id": "57",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-obnovlyaem-tinymce-do-4-versii\/",
            "title": "SimplaCMS: обновляем TinyMCE до 4 версии",
            "content_html": "<p>Кривой TinyMCE 3 версии в 2019 году уже невозможно использовать. Он регулярно вставляет всякие спаны и непечатаемые пробелы, поэтому нужно было обновить его версию. <br \/><\/p>\n<ol start=\"1\">\n<li>Открываем \/simpla\/design\/js\/ и создаём папку tinymce<\/li>\n<li><a href=\"http:\/\/download.moxiecode.com\/tinymce\/tinymce_4.1.7_jquery.zip\">Скачаем<\/a> сам TinyMCE и положим содержимое папки js в папку tinymce. Краткая структура файлов и папок в папке tinymce должна быть такой:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>-langs\r\n-plugins\r\n-skins\r\n-themes\r\n--jquery.tinymce.min.js\r\n--tinymce.min.js<\/code><\/pre><ol start=\"3\">\n<li>Открываем файл  \/simpla\/design\/html\/tinymce_init.tpl и меняем полностью его содержимое на:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>&lt;script language=&quot;javascript&quot; type=&quot;text\/javascript&quot; src=&quot;design\/js\/tinymce\/tinymce.min.js&quot;&gt;&lt;\/script&gt;\r\n&lt;script language=&quot;javascript&quot;&gt;\r\ntinymce.init({\r\n    selector: &quot;textarea.editor_large,textarea.editor_small&quot;,\r\n    language : &quot;ru&quot;,\r\n    plugins: [\r\n        &quot;advlist autosave autolink lists link image charmap print preview hr anchor pagebreak&quot;,\r\n        &quot;searchreplace wordcount charactercount charmap visualblocks visualchars code fullscreen&quot;,\r\n        &quot;insertdatetime media nonbreaking save table contextmenu directionality&quot;,\r\n        &quot;emoticons template paste textcolor colorpicker textpattern  &quot;\r\n   ],\r\n   toolbar1: &quot;undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link unlink anchor | image media charmap blockquote | forecolor backcolor | removeformat print preview code emoticons &quot;,\r\nmenubar: '',\r\n   verify_html: false, \r\n   image_advtab: true,\r\n        setup : function(ed) {\r\n        if(typeof set_meta == 'function')\r\n        {\r\n            ed.on('keyUp', function() {\r\n                set_meta();\r\n            });\r\n            ed.on('change', function() {\r\n                set_meta();\r\n            });\r\n        }\r\n    }\r\n    {literal}}{\/literal});\r\n    function myCustomGetContent( id ) {\r\n        if( typeof tinymce != &quot;undefined&quot; ) {\r\n            var editor = tinymce.get( id );\r\n            if( editor &amp;&amp; editor instanceof tinymce.Editor ) {\r\n                return editor.getContent{literal}({format : 'text'}{\/literal}).substr(0, 512);\r\n            } else {\r\n                return  jQuery('textarea[name='+id+']').val().replace(\/(&lt;([^&gt;]+)&gt;)\/ig,&quot; &quot;).replace(\/(\\&amp;nbsp;)\/ig,&quot; &quot;).replace(\/^\\s+|\\s+$\/g, '').substr(0, 255);\r\n            }\r\n        }\r\n        return '';\r\n    }\r\n&lt;\/script&gt;<\/code><\/pre><ol start=\"4\">\n<li>Далее необходимо поправить автогенерацию meta description в админке. Для этого нужно полностью заменить функцию generate_meta_description() в файлах:\n<ul>\n  <li>\/simpla\/design\/html\/product.tpl<\/li>\n  <li>\/simpla\/design\/html\/post.tpl<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code>\/\/ Обновлённая функция, которую нужно вставить в файлы\r\nfunction generate_meta_description()\r\n{\r\n\tif( typeof tinymce != &quot;undefined&quot; )\r\n\t{\r\n\t\treturn myCustomGetContent( &quot;annotation&quot; );\r\n\t}\r\n\telse\r\n\t\treturn $('textarea[name=annotation]').val().replace(\/(&lt;([^&gt;]+)&gt;)\/ig,&quot; &quot;).replace(\/(\\&amp;nbsp;)\/ig,&quot; &quot;).replace(\/^\\s+|\\s+$\/g, '').substr(0, 255);\r\n}<\/code><\/pre><p>В файле \/simpla\/design\/html\/category.tpl полностью обновляем функцию:<\/p>\n<pre class=\"e2-text-code\"><code>function generate_meta_description()\r\n{\r\n\tif( typeof tinymce != &quot;undefined&quot; )\r\n\t{\r\n\t\treturn myCustomGetContent( &quot;description&quot; );\r\n\t}\r\n\telse\r\n\t\treturn $('textarea[name=description]').val().replace(\/(&lt;([^&gt;]+)&gt;)\/ig,&quot; &quot;).replace(\/(\\&amp;nbsp;)\/ig,&quot; &quot;).replace(\/^\\s+|\\s+$\/g, '').substr(0, 255);\r\n}<\/code><\/pre><p>В файле \/simpla\/design\/html\/page.tpl полностью обновляем функцию:<\/p>\n<pre class=\"e2-text-code\"><code>function generate_meta_description()\r\n{\r\n\tif( typeof tinymce != &quot;undefined&quot; )\r\n\t{\r\n\t\treturn myCustomGetContent( &quot;body&quot; );\r\n\t}\r\n\telse\r\n\t\treturn $('textarea[name=body]').val().replace(\/(&lt;([^&gt;]+)&gt;)\/ig,&quot; &quot;).replace(\/(\\&amp;nbsp;)\/ig,&quot; &quot;).replace(\/^\\s+|\\s+$\/g, '').substr(0, 255);\r\n}<\/code><\/pre><p><b>Результат работы<\/b><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/tinymcesimplacms.jpg\" width=\"1477\" height=\"795\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2019-05-14T19:37:36+03:00",
            "date_modified": "2019-05-14T19:41:23+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/tinymcesimplacms.jpg",
            "_date_published_rfc2822": "Tue, 14 May 2019 19:37:36 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "57",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/tinymcesimplacms.jpg"
                ]
            }
        },
        {
            "id": "56",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-sosednie-tovary-vyvod-brenda\/",
            "title": "SimplaCMS: соседние товары, вывод бренда",
            "content_html": "<p>Откроем файл \/view\/ProductView.php, отыщем строчку<\/p>\n<pre class=\"e2-text-code\"><code>\/\/Соседние товары<\/code><\/pre><p>И заменим содержимое блока на:<\/p>\n<pre class=\"e2-text-code\"><code>$next = $this-&gt;products-&gt;get_next_product($product-&gt;id);\r\n\t\t$next_brand = $this-&gt;brands-&gt;get_brand(intval($next-&gt;brand_id));\r\n\t\t$i = $this-&gt;products-&gt;get_images(array('product_id'=&gt;$next-&gt;id));\r\n\t\t$next-&gt;image = reset($i);\r\n\t\t$next-&gt;brand = $next_brand;\r\n\r\n\t\t$prev = $this-&gt;products-&gt;get_prev_product($product-&gt;id);\r\n\t\t$prev_brand = $this-&gt;brands-&gt;get_brand(intval($prev-&gt;brand_id));\r\n\t\t$i = $this-&gt;products-&gt;get_images(array('product_id'=&gt;$prev-&gt;id));\r\n\t\t$prev-&gt;image = reset($i);\r\n\t\t$prev-&gt;brand = $prev_brand;<\/code><\/pre><p>Теперь, чтобы вывести бренд соседнего товара:<\/p>\n<pre class=\"e2-text-code\"><code>{$prev_product-&gt;brand-&gt;name} или {$next_product-&gt;brand-&gt;name}<\/code><\/pre>",
            "date_published": "2019-05-05T16:40:14+03:00",
            "date_modified": "2019-05-05T16:40:07+03:00",
            "_date_published_rfc2822": "Sun, 05 May 2019 16:40:14 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "56",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "54",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-podklyuchaem-yandeks-turbo-dlya-novostey\/",
            "title": "SimplaCMS: подключаем Яндекс Турбо для новостей",
            "content_html": "<p>Создадим новый файл RssView.php в папке \/view\/ со следующим содержимым:<\/p>\n<pre class=\"e2-text-code\"><code>&lt;?PHP\r\nrequire_once('View.php');\r\nclass RssView extends View\r\n{\r\n  public function fetch()\r\n  {\r\n    $items_per_page = 20;\r\n    $params = array();\r\n    $params['visible'] = 1;\r\n    $params['limit'] = $items_per_page;\r\n     \r\n    switch($this-&gt;request-&gt;get('type', 'string')) {\r\n        default:\r\n            $items = $this-&gt;blog-&gt;get_posts($params);  \r\n            $category = 'Статьи компании';  \r\n            $cat_url = $this-&gt;config-&gt;root_url.'\/blog';\r\n            $base_url = $this-&gt;config-&gt;root_url.'\/blog\/';\r\n    }\r\n    header(&quot;Content-Type: application\/rss+xml; charset=UTF-8&quot;); \r\n    $p = $items[0];\r\n    $rssfeed = '&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;';\r\n    $rssfeed .= '&lt;rss xmlns:yandex=&quot;http:\/\/news.yandex.ru&quot; xmlns:media=&quot;http:\/\/search.yahoo.com\/mrss\/&quot; xmlns:turbo=&quot;http:\/\/turbo.yandex.ru&quot; version=&quot;2.0&quot;&gt;';\r\n    $rssfeed .= '&lt;channel&gt;';\r\n    $rssfeed .= '&lt;title&gt;'.$this-&gt;settings-&gt;site_name.'&lt;\/title&gt;';\r\n    $rssfeed .= '&lt;link&gt;'.$cat_url.'&lt;\/link&gt;';\r\n    $rssfeed .= '&lt;description&gt;'.$this-&gt;settings-&gt;company_name.'&lt;\/description&gt;';\r\n    $rssfeed .= '&lt;language&gt;ru-ru&lt;\/language&gt;';\r\n    $rssfeed .= '&lt;category&gt;' . $category . '&lt;\/category&gt;';\r\n    $rssfeed .= '&lt;copyright&gt;Copyright '.date('Y').' '.$this-&gt;settings-&gt;company_name.'&lt;\/copyright&gt;';\r\n    $rssfeed .= '&lt;pubDate&gt;' . date(&quot;D, d M Y H:i:s O&quot;, strtotime($p-&gt;date)) . '&lt;\/pubDate&gt;';\r\n    $rssfeed .= '&lt;lastBuildDate&gt;' . date(&quot;D, d M Y H:i:s O&quot;, strtotime($p-&gt;date)) . '&lt;\/lastBuildDate&gt;';\r\n    foreach($items as $p) {\r\n        $rssfeed .= '&lt;item turbo=&quot;true&quot;&gt;';\r\n        $rssfeed .= '&lt;guid isPermaLink=&quot;true&quot;&gt;'. $base_url . $p-&gt;url . '&lt;\/guid&gt;';\r\n        $rssfeed .= '&lt;link&gt;'. $base_url . $p-&gt;url . '&lt;\/link&gt;';\r\n        $rssfeed .= '&lt;turbo:content&gt;';\r\n        $rssfeed .= '&lt;![CDATA[';\r\n        $rssfeed .= '&lt;header&gt;';\r\n        $rssfeed .= '&lt;h1&gt;' . $p-&gt;name . '&lt;\/h1&gt;';\r\n        $rssfeed .= '&lt;\/header&gt;';\r\n        $rssfeed .= '&lt;p&gt;'. ($p-&gt;text) . '&lt;\/p&gt;';\r\n        $rssfeed .= '&lt;div data-block=&quot;share&quot; data-network=&quot;twitter, facebook&quot;&gt;&lt;\/div&gt;';\r\n        $rssfeed .= ']]&gt;';\r\n        $rssfeed .= '&lt;\/turbo:content&gt;';\r\n        $rssfeed .= '&lt;title&gt;' . $p-&gt;name . '&lt;\/title&gt;';\r\n        $rssfeed .= '&lt;description&gt;&lt;![CDATA[' . ($p-&gt;annotation) . ']]&gt;&lt;\/description&gt;';\r\n        $rssfeed .= '&lt;comments&gt;'. $base_url . $p-&gt;url . '#comments&lt;\/comments&gt;';\r\n        $rssfeed .= '&lt;pubDate&gt;' . date(&quot;D, d M Y H:i:s O&quot;, strtotime($p-&gt;date)) . '&lt;\/pubDate&gt;';\r\n        $rssfeed .= '&lt;\/item&gt;';\r\n    }\r\n    $rssfeed .= '&lt;\/channel&gt;';\r\n    $rssfeed .= '&lt;\/rss&gt;';    \r\n    print($rssfeed);\r\n    exit();\r\n  }  \r\n}<\/code><\/pre><p>Далее откроем в корне сайта .htaccess и после строчки<\/p>\n<pre class=\"e2-text-code\"><code>RewriteRule ^blog(.*)$ \/news$1 [L,R=301]<\/code><\/pre><p>Добавим в него новое правило:<\/p>\n<pre class=\"e2-text-code\"><code>RewriteRule ^rss?$  index.php?module=RssView  [L,QSA]<\/code><\/pre><p>Теперь у вас есть RSS лента, оптимизированная под Яндекс.Турбо по адресу ваш_сайт.ру\/rss<br \/>\nДалее откроем Вебмастер Яндекса, откроем раздел Турбо Страницы -> Источники и добавим ссылку на ваш RSS-канал:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_1.jpg\" width=\"1087\" height=\"474\" alt=\"\" \/>\n<\/div>\n<p>Нажимаем кнопку добавить и ждём когда канал загрузится в систему. После этого проверяем, чтобы всё работало без ошибок и нажимаем кнопку Вкл:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2_2.jpg\" width=\"788\" height=\"623\" alt=\"\" \/>\n<\/div>\n<p>Теперь нужно несколько часов на модерацию вашего источника, а после завершения ваши новости будут в формате Яндекс Турбо ;-)<\/p>\n",
            "date_published": "2019-04-18T04:10:47+03:00",
            "date_modified": "2019-04-18T04:10:41+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_1.jpg",
            "_date_published_rfc2822": "Thu, 18 Apr 2019 04:10:47 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "54",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_1_1.jpg",
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2_2.jpg"
                ]
            }
        },
        {
            "id": "53",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simpla-cms-nazvaniya-izobrazheniy-bez-hesha\/",
            "title": "Simpla CMS: названия изображений без хеша",
            "content_html": "<p>Решение принадлежит DaVinci и большая ему благодарность за это.<br \/>\nРешение позволяет избавиться от хеша в названии изображения, что позволит изображениям залетать в индекс поисковых систем.  Базовое имя у изображений весьма кривое:<\/p>\n<p>В стандарной симпле адрес изображения имеет абракадабру на конце:<\/p>\n<pre class=\"e2-text-code\"><code>8b8a7e13a7e2e5a7ee9f<\/code><\/pre><p>Чтобы от него изобавиться нужно открыть \/resize\/resize.php и закомментировать:<\/p>\n<pre class=\"e2-text-code\"><code>\/*\r\nif(!$simpla-&gt;config-&gt;check_token($filename, $token))\r\n\texit('bad token');\r\n*\/<\/code><\/pre><p>Далее открываем Design.php и добавим в функцию public function resize_modifier после переменных $resized_filename и $resized_filename_encode:<\/p>\n<pre class=\"e2-text-code\"><code>$size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?&quot;w&quot;:'');\r\n        $image_sizes = array();\r\n        if($this-&gt;settings-&gt;image_sizes)\r\n            $image_sizes = explode('|',$this-&gt;settings-&gt;image_sizes);\r\n        if(!in_array($size, $image_sizes)){\r\n            $image_sizes[] = $size;\r\n            $this-&gt;settings-&gt;image_sizes = implode('|',$image_sizes);\r\n        }<\/code><\/pre><p>В этой же функции ниже нужно закомментировать хвост у строчки:<\/p>\n<pre class=\"e2-text-code\"><code>return $this-&gt;config-&gt;root_url.'\/'.$this-&gt;config-&gt;resized_images_dir.$resized_filename_encoded\/*.'?'.$this-&gt;config-&gt;token($resized_filename)*\/;<\/code><\/pre><p>Далее открываем файл Image.php и в функцию function resize добавить после конструкции list:<\/p>\n<pre class=\"e2-text-code\"><code>$size = ($width?$width:0).'x'.($height?$height:0).($set_watermark?&quot;w&quot;:'');\r\n        $image_sizes = array();\r\n        if($this-&gt;settings-&gt;image_sizes)\r\n            $image_sizes = explode('|',$this-&gt;settings-&gt;image_sizes);\r\n        if(!in_array($size, $image_sizes)){\r\n            header(&quot;http\/1.0 404 not found&quot;);\r\n            exit();\r\n        }<\/code><\/pre><p>Всё. Теперь все изображения без абракадабры на конце.<\/p>\n",
            "date_published": "2019-04-10T22:02:09+03:00",
            "date_modified": "2019-04-10T22:01:58+03:00",
            "_date_published_rfc2822": "Wed, 10 Apr 2019 22:02:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "53",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "39",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simplacms-itogovaya-stoimost-na-thankyou-page\/",
            "title": "SimplaCMS: Итоговая стоимость на ThankYou Page",
            "content_html": "<p>Не нашёл переменной, которая выводит стоимость заказа с учётом доставки, пришлось написать костылёк прям в шаблоне. Работает просто — забираем данные из переменных (total_price и delivery_price), складываем (math equation), преобразовываем в переменную (assign) и выводим значение в отформатированном виде (total|convert).<\/p>\n<pre class=\"e2-text-code\"><code>{math equation = $order-&gt;total_price + $order-&gt;delivery_price assign = 'total'}\r\n{$total|convert} {$currency-&gt;sign}<\/code><\/pre>",
            "date_published": "2018-05-13T11:46:56+03:00",
            "date_modified": "2018-05-13T11:48:29+03:00",
            "_date_published_rfc2822": "Sun, 13 May 2018 11:46:56 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "39",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "27",
            "url": "https:\/\/blog.chudenkov.ru\/all\/simpla-pokazyvaem-blok-v-opredelyonnoe-vremya\/",
            "title": "Simpla: Показываем JivoSite в определённое время",
            "content_html": "<p>Сделал на одном сайте привязку кнопок «Обратный звонок» и «Отправить заявку» к <a href=\"https:\/\/www.jivosite.ru\/?partner_id=16528&lang=ru&pricelist_id=105\">JivoSite<\/a>.<br \/>\nВозможно для кого-то это покажется дикостью, но это на самом деле удобно — обратный звонок должен происходить моментально, а не через три часа, когда менеджер по продажам, который отсиживает жопу на зарплате, накурится сигарет и напьется кофе. И JivoSite в этом плане оказался очень удобен.<\/p>\n<p>Но столкнулся с интересной проблемой. В JivoSite есть настройки времени, когда можно совершать звонок с сайта. Чтобы появилась форма обратного звонка нужно нажать на соответствующую кнопку\/ссылку. Конкретный пример:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2_1.jpg\" width=\"648\" height=\"153\" alt=\"\" \/>\n<\/div>\n<p>Предположим мы поставим в настройках JivoSite часы работы с 9 до 18 часов. Как вы думаете, что произойдет, если мы нажмём на ссылку «Обратный звонок» в 18:02? Правильно. Ничего. Она не сработает, а это проёбаный лид. Техподдержке передал, но нужно сохранить лид уже сегодня и своими силами.<\/p>\n<p>Чтобы лид остался с нами, нужно проверить сколько сейчас на часах и предложить альтернативу, например, оффлайн форму того же JivoSite. И в SimplaCMS это решалось так:<\/p>\n<pre class=\"e2-text-code\"><code>&lt;a href=&quot;tel:{$settings-&gt;company_phone|escape}&quot;&gt;&lt;h3&gt;{$settings-&gt;company_phone|escape}&lt;\/h3&gt;&lt;\/a&gt;\r\n{if $smarty.now|date_format:'%H.%M' &gt; '09.00' &amp;&amp; $smarty.now|date_format:'%H.%M' &lt; '18.00' }\r\n{literal}&lt;a href=&quot;#&quot; onclick=&quot;jivo_api.open({start : 'call'});&quot;&gt;Обратный звонок&lt;\/a&gt;{\/literal}\r\n{else}\r\n&lt;a href=&quot;#&quot; onclick=&quot;jivo_api.open();&quot;&gt;Обратный звонок&lt;\/a&gt;\r\n{\/if}<\/code><\/pre><p>Если время сервера попадает в заданный интервал, показать ссылку №1. В противном случае №2.<\/p>\n",
            "date_published": "2018-04-10T01:55:17+03:00",
            "date_modified": "2018-04-10T01:57:22+03:00",
            "image": "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2_1.jpg",
            "_date_published_rfc2822": "Tue, 10 Apr 2018 01:55:17 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "27",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/blog.chudenkov.ru\/pictures\/Screenshot_2_1.jpg"
                ]
            }
        }
    ],
    "_e2_version": 3365,
    "_e2_ua_string": "E2 (v3365; Aegea)"
}