<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>php &#8212; Nikita Spivak</title>
	<atom:link href="https://nikita-sp.com.ua/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>https://nikita-sp.com.ua</link>
	<description>web developer&#039;s portfolio</description>
	<lastBuildDate>Tue, 05 Apr 2016 15:34:11 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Система событий в Opencart 2.x: как использовать event</title>
		<link>https://nikita-sp.com.ua/2015/12/sistema-sobyitiy-opencart-2-ispolzovat-event.html</link>
					<comments>https://nikita-sp.com.ua/2015/12/sistema-sobyitiy-opencart-2-ispolzovat-event.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Fri, 18 Dec 2015 18:00:08 +0000</pubDate>
				<category><![CDATA[Интересное в мире]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[интересно]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2995</guid>

					<description><![CDATA[В продолжение изучения новых возможностей Opencart 2.x рассмотрим Event-систему данной CMS, которую мы слегка затронули при изучении установщика расширений (Extension Installer) в Opencart 2.x, который позволяет устанавливать модификации и расширения. В данной статье мы разберемся как работает система событий в Opencart 2.x, и как ее использовать при написании своих модулей. Данная система позволяет писать код, который будет выполняться при определенных [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>В продолжение изучения <a href="http://nikita-sp.com.ua/2015/03/novyie-funktsii-i-vozmozhnosti-opencart2.html" data-wpel-link="internal">новых возможностей Opencart 2.x</a> рассмотрим Event-систему данной CMS, которую мы слегка затронули при изучении <a href="http://nikita-sp.com.ua/2015/04/moduli-rasshireniya-i-modifikatsii-v-opencart-2.html" data-wpel-link="internal">установщика расширений (Extension Installer) в Opencart 2.x</a>, который позволяет устанавливать модификации и расширения.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers.jpg" rel="lightbox[2995]" data-wpel-link="internal"><img fetchpriority="high" decoding="async" width="600" height="257" itemprop="image" class="aligncenter size-medium wp-image-2997" src="http://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers-600x257.jpg" alt="Система событий и триггеров в Opencart 2" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers-600x257.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers-768x329.jpg 768w, https://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers-150x64.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/12/opencart-2-triggers.jpg 800w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>В данной статье мы разберемся как работает <strong>система событий в Opencart 2.x</strong>, и как ее использовать при написании своих модулей.<span id="more-2995"></span></p>
<p>Данная система позволяет писать код, который будет выполняться при определенных событиях, происходящих в OpenCart. Такими событиями могут быть:</p>
<ul>
<li>создание учетной записи (регистрация);</li>
<li>оформление заказа;</li>
<li>редактирование адресов пользователя;</li>
</ul>
<p>или другие ключевые события, которые имеют строку с вызовом триггера, и все это без необходимости использования vQmod или OCMOD, или изменения файлов системы! С помощью системы событий, вы можете избежать ошибок, которые происходят, когда вы используете систему модификаций вроде vQmod или OCMOD.</p>
<h2>Как работают события Opencart 2.x</h2>
<p>Для использования системы событий достаточно выполнить два действия:</p>
<ol>
<li>регистрация обработчика событий;</li>
<li>реализация обработчика событий;</li>
</ol>
<p>Обработчики событий &#8212; просто методы, определенные в файлах контроллера. Вы можете использовать один файл для всех ваших методов или вы можете создать отдельный контроллер для ваших обработчиков событий.</p>
<p>Для регистрации обработчики событий необходимо использовать модель <em>extension/event</em> (для OpenCart 2.0.1+) или модель <em>tool/event</em> (для OpenCart 2.0.0.0).</p>
<p>В модели <em>extension/event</em> есть 2 метода:</p>
<ol>
<li>addEvent($code, $trigger, $action);</li>
<li>deleteEvent($code).</li>
</ol>
<p>Не сложно догадаться, что функция <em>addEvent()</em> используется для регистрации обработчиков событий, а <em>deleteEvent()</em> используется для отмены регистрации. Это позволяет зарегистрировать свои обработчики событий в методе <em>install()</em> контроллера вашего модуля в <em>admin</em> разделе, а также удалить их, когда ваш модуль удаляется, для чего используется метод <em>uninstall()</em> этого же файла контроллера.</p>
<p>Аргумент <em>$code</em> &#8212; используется для группы обработчиков событий. Здесь вы указываете название вашего модуля.</p>
<p>Аргумент <em>$trigger</em>  -название события, на которые вы хотели бы установить обработчик. Список всех доступных триггеров, можно найти здесь: <a href="https://github.com/opencart/opencart/wiki/Events-(script-notifications)" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="ext-link wpel-icon-right">https://github.com/opencart/opencart/wiki/Events-(script-notifications)<span class="wpel-icon wpel-image wpel-icon-6"></span></a>.</p>
<p>Аргумент <em>$action</em> путь к вашей функции обработчика. Указывается в виде стандартного адреса к контроллеру. Например: <em>module/mymodule/on_install</em>.</p>
<h2>Пример событий Opencart 2.x</h2>
<p>В данном примере предполагается, что мы работаем с OpenCart 2.0.1+. Теперь давайте предположим, что мы создаем модуль под названием &#171;My Module&#187;. Файл-контроллер администратора для модуля будет admin/controller/module/mymodule.php. Файл-контроллер каталога для модуля будет catalog/controller/module/mymodule.php.</p>
<p>Модуль будет реализовывать 2 простые функции:</p>
<ol>
<li>отправку сообщения электронной почты администратору, когда удаляется магазин (мультимагазин);</li>
<li>отправку сообщения электронной почты администратору при регистрации клиента.</li>
</ol>
<p>Триггеры, которые мы будем использовать в <strong>pre.admin.store.delete</strong> и <strong>post.customer.add</strong>.</p>
<p>Для начала, мы зарегистрируем наши обработчики событий в методе <em>install()</em> нашего модуля:</p>
<pre class="brush: php; title: Код:; notranslate">
public function install() {
    $this-&gt;load-&gt;model('extension/event');
    $this-&gt;model_extension_event-&gt;addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');
    $this-&gt;model_extension_event-&gt;addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add');
}
</pre>
<p>Мы также должны позаботиться о процессе удаления, и удалить обработчики событий в случае удаления модуля:</p>
<pre class="brush: php; title: Код:; notranslate">
public function uninstall() {
    $this-&gt;load-&gt;model('extension/event');
    $this-&gt;model_extension_event-&gt;deleteEvent('mymodule');
}
</pre>
<p>Далее, мы должны реализовать обработчики событий. События, название которых начинается с <strong>pre</strong>, вызываются <strong>перед</strong> выполнением действия, а события, название которых начинаются с <strong>post</strong> &#8212; <strong>после</strong> завершения действия.</p>
<p>Если нам необходимо включить домен магазина в наше сообщение, выбираем событие &#171;pre&#187; вместо &#171;post&#187;, т.к. при использовании <strong>post.admin.store.delete</strong> мы не сможем получить домен магазина.</p>
<p>Событие <strong>pre.admin.store.delete</strong> генерируется в админке, так что его обработчик должен быть реализован в файле контроллера администратора для нашего модуля. Мы хотим, чтобы наш обработчик событий уведомлял администратора об удалении магазина, и наш обработчик будет выглядеть примерно так:</p>
<pre class="brush: php; title: Код:; notranslate">
public function on_store_delete($store_id) {
    $this-&gt;load-&gt;model('setting/store');
    $store_info = $this-&gt;model_setting_store-&gt;getStore($store_id);
    $admin_mail = $this-&gt;config-&gt;get('config_email');
    mail($admin_mail, &quot;A store has been deleted&quot;, &quot;The store &quot; . $store_info['url'] . &quot; was deleted.&quot;);
}
</pre>
<p>Все, что осталось сделать, это реализовать обработчик для события <strong>post.customer.add</strong>. Мы будем делать это в каталоге контроллера нашего модуля. Метод будет уведомлять администратора, когда регистрируется новый клиент и будет выглядеть примерно так:</p>
<pre class="brush: php; title: Код:; notranslate">
public function on_customer_add($customer_id) {
    $this-&gt;load-&gt;model('account/customer');
    $customer_info = $this-&gt;model_account_customer-&gt;getCustomer($customer_id);
    $admin_mail = $this-&gt;config-&gt;get('config_email');
    mail($admin_mail, &quot;New Customer&quot;, &quot;A new customer has just registered with the following e-mail: &quot; . $customer_info['email']);
}
</pre>
<p><span style="color: #ff0000;"><strong>Внимание:</strong></span> в примере используется функция <em>mail()</em> для отправки электронной почты для простоты. В реальной ситуации для этого необходимо использовать класс OpenCart.</p>
<p>Окончательные версии наших файлов выглядит следующим образом:<br />
<em>admin/controller/module/mymodule.php</em></p>
<pre class="brush: php; title: Код:; notranslate">
&lt;?php class ControllerModuleMyModule extends Controller { public function install() { $this-&gt;load-&gt;model('extension/event');
        $this-&gt;model_extension_event-&gt;addEvent('mymodule', 'pre.admin.store.delete', 'module/mymodule/on_store_delete');
        $this-&gt;model_extension_event-&gt;addEvent('mymodule', 'post.customer.add', 'module/mymodule/on_customer_add');
    }
    
    public function uninstall() {
        $this-&gt;load-&gt;model('extension/event');
        $this-&gt;model_extension_event-&gt;deleteEvent('mymodule');
    }
    
    public function on_store_delete($store_id) {
        $this-&gt;load-&gt;model('setting/store');
        $store_info = $this-&gt;model_setting_store-&gt;getStore($store_id);
        $admin_mail = $this-&gt;config-&gt;get('config_email');
        mail($admin_mail, &quot;A store has been deleted&quot;, &quot;The store &quot; . $store_info['url'] . &quot; was deleted.&quot;);
    }
}
</pre>
<p><em>catalog/controller/module/mymodule.php</em></p>
<pre class="brush: php; title: Код:; notranslate">
&lt;?php class ControllerModuleMyModule extends Controller { public function on_customer_add($customer_id) { $this-&gt;load-&gt;model('account/customer');
        $customer_info = $this-&gt;model_account_customer-&gt;getCustomer($customer_id);
        $admin_mail = $this-&gt;config-&gt;get('config_email');
        mail($admin_mail, &quot;New Customer&quot;, &quot;A new customer has just registered with the following e-mail: &quot; . $customer_info['email']);
    }
}
</pre>
<h2>Дополнительно</h2>
<p>Помимо стандартного использования, система событий может быть использована для создания кросс-модульной интеграции. Используя объект Event ($this->event), вы можете вызвать любое событие в любой точке, а также чтобы вызвать свои собственные события.</p>
<p>Представьте себе, что вы разрабатываете модуль для комментариев. Вы создаете событие на действие по отправке комментария, например, что позволит другим разработчикам модулей создать методы-обработчики событий для ваших и выполнить код без необходимости vQmod или OCMOD. Это будет гарантировать, лучшую стабильность системы и лучший потребительский опыт. Вы также можете использовать систему для регистрации и запуска собственных событий во время выполнения.</p>
<p>Класс событий определяется в файле <em>system/engine/event.php</em>, так что вы можете взглянуть на нее для дальнейшего использования.</p>
<h2>Заключение</h2>
<p>Освоение <strong>системы событий в OpenCart</strong> выгодно во многих отношениях! И я рекомендую использовать события вместо системы модификации vQmod или OCMOD везде, где это возможно. Это позволит сократить количество глюков и несовместимостей модулей и дополнений других разработчиков с вашими. Также это позволяет создавать и использовать межмодульные связи, так что вы можете сделать несколько модулей, работающих вместе красиво и элегантно.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/12/sistema-sobyitiy-opencart-2-ispolzovat-event.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Скрыть весь контент страницы OnePress Social Locker</title>
		<link>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html</link>
					<comments>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Mon, 09 Nov 2015 18:00:49 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[интересно]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2788</guid>

					<description><![CDATA[Несколько дней назад я уже рассказывал о социальных блокировщиках контента, для чего они нужны и в чем их преимущества и недостатки. Сегодня я хочу поделиться одним скромным решением для сайтов на WordPress, на которых все-таки установлен бесплатный плагин социального блокировщика контента OnePress Social Locker. Данный плагин очень удобный и имеет достаточно настроек, но к сожалению, в нем отсутствует [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Несколько дней назад я уже рассказывал <a href="http://nikita-sp.com.ua/2015/11/blokirovat-kontent-sayta-cherez-sotsialnyie-seti.html" data-wpel-link="internal">о социальных блокировщиках контента</a>, для чего они нужны и в чем их преимущества и недостатки. Сегодня я хочу поделиться одним скромным решением для сайтов на <strong>WordPress</strong>, на которых все-таки установлен бесплатный плагин социального блокировщика контента <strong>OnePress Social Locker</strong>.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker.jpg" rel="lightbox[2788]" data-wpel-link="internal"><img decoding="async" width="960" height="321" itemprop="image" class="aligncenter size-large wp-image-2810" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-960x321.jpg" alt="One Press Social Locker" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-960x321.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-600x201.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-150x50.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker.jpg 983w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>
<p>Данный плагин очень удобный и имеет достаточно настроек, но к сожалению, в нем отсутствует опция блокирования всего контента страницы/статьи, о чем и пойдет речь.<span id="more-2788"></span></p>
<p><strong>OnePress Social Locker</strong> &#8212; это один из популярных <span style="text-decoration: underline;">бесплатных</span> (<em>если не единственный бесплатный</em>) социальных локеров контента для WordPress. Он позволяет блокировать определенный контент на странице при помощи shortcode (шорткодов/тегов, см. изображение). Вы можете создать несколько типов блокировки (текст, оформление блокирующего блока) и использовать для разных кусков контента. Например:</p>
<ol>
<li>Чтобы скачать с сайта &#8212; создадим блокировщик с текстом &#171;Ссылка скрыта, подпишитесь на группу чтобы скачать&#187; и ссылка на группу;</li>
<li>Чтобы просмотреть отдельную часть статьи &#8212; создадим блокировщик с текстом &#171;Контент защищен, поставьте лайк чтобы увидеть&#187; и кнопочки для лайков;</li>
</ol>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png" rel="lightbox[2788]" data-wpel-link="internal"><img decoding="async" width="530" height="315" itemprop="image" class="aligncenter size-full wp-image-2809" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png" alt="Создаем блокировщик используя One Press Social Locker для WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2.png 530w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-2-150x89.png 150w" sizes="(max-width: 530px) 100vw, 530px" /></a></p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png" rel="lightbox[2788]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="530" height="650" itemprop="image" class="aligncenter size-full wp-image-2808" src="http://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png" alt="Обворачиваем контент в шорткод используя One Press Social Locker для WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1.png 530w, https://nikita-sp.com.ua/wp-content/uploads/2015/11/one-press-social-locker-1-122x150.png 122w" sizes="auto, (max-width: 530px) 100vw, 530px" /></a>Также, плагин позволяет автоматически закрыть нужный контент в уже существующих записях: вы можете закрыть весь контент или только часть статьи, используя следующие правила:</p>
<ul>
<li>количество абзацев после которых дальнейший контент будет заблокирован;</li>
<li>скрывать контент после тега &#171;Далее&#187; (&lt;!&#8212; more &#8212;&gt;);</li>
</ul>
<p>и еще множество других. Но! Если мы скроем контент таким образом, то при необходимости убрать блокировку необходимо будет перелопатить потом вручную все записи, удаляя шорткод. Чтобы не прибегать к такому неудобному способу, было разработано следующее решение: заменить в файле <em>single.php</em> стандартный вывод контента на следующий код:</p>
<pre class="brush: php; title: Код:; notranslate">	 	 
$content = get_the_content();
$content = apply_filters('the_content', $content);
echo do_shortcode('[sociallocker]'.$content.'[/sociallocker]');
</pre>
<p>Таким образом весь контент нашей статьи будет обернут в shortcode блокировщика и его можно будет, спустя некоторое время, безболезненно и быстро убрать, при этом не редактируя все записи на вашем сайте.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/11/skryit-ves-kontent-stranitsyi-onepress-social-locker.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Установка OCMOD модулей на Opencart 2.x на localhost (denwer) без FTP</title>
		<link>https://nikita-sp.com.ua/2015/06/install-ocmod-module-opencart-2-localhost-denwer-bez-ftp.html</link>
					<comments>https://nikita-sp.com.ua/2015/06/install-ocmod-module-opencart-2-localhost-denwer-bez-ftp.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Mon, 22 Jun 2015 08:40:44 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2372</guid>

					<description><![CDATA[Работая с интернет магазином на Opencart 2 на локальном хосте (я использую, например, Denwer), вы можете столкнутся со сложностью установки OCMOD модулей, т.к. установщик требует настроенного FTP доступа, а в пакете Denwer&#8217;a отсутствует FTP server. Таким образом, разработчик не может установить модификации на Opencart 2 используя стандартный Extension Installer. Но для решения этой проблемы существует решение, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Работая с интернет магазином на Opencart 2 на локальном хосте (я использую, например, Denwer), вы можете столкнутся со сложностью установки OCMOD модулей, т.к. установщик требует настроенного FTP доступа, а в пакете Denwer&#8217;a отсутствует FTP server.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error.jpg" rel="lightbox[2372]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="394" itemprop="image" class="aligncenter size-medium wp-image-2443" src="http://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error-600x394.jpg" alt="Opencart extension installer ошибка ftp" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error-600x394.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error-960x630.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error-150x98.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-extension-installer-ftp-error.jpg 1323w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>Таким образом, разработчик не может установить модификации на Opencart 2 используя стандартный Extension Installer. Но для решения этой проблемы существует решение, достаточно простое и красивое. Достаточно лишь модифицировать несколько строк кода!<span id="more-2372"></span></p>
<p>Итак, для изменения алгоритма работы установщика дополнений в Opencart 2.x необходимо модифицировать файл <em>admin/controller/extension/installer.php</em></p>
<p>Далее необходимо найти строку, где указан шаг с использование FTP соединения для копирования файлов дополнения на сервер (~133 line):</p>
<pre class="brush: php; title: Код:; notranslate">'url'  =&gt; str_replace('&amp;amp;', '&amp;', $this-&gt;url-&gt;link('extension/installer/ftp', 'token=' . $this-&gt;session-&gt;data['token'], 'SSL')),</pre>
<p>Как видим в троке идет обращение к функции FTP, соответственно, для обхода данного шага нам необходимо изменить имя вызываемой функции на имя нашей функции, которую мы добавим в файл далее. Для этого заменим вышеупомянутую строку на следующую:</p>
<pre class="brush: php; title: Код:; notranslate">'url'  =&gt; str_replace('&amp;amp;', '&amp;', $this-&gt;url-&gt;link('extension/installer/localcopy', 'token=' . $this-&gt;session-&gt;data['token'], 'SSL')),</pre>
<p>После этого нам необходимо добавить собственно саму функцию localcopy(), код которой расположен ниже, в любое удобное место, например, перед строкой (~535 line):</p>
<pre class="brush: php; title: Код:; notranslate">public function clear() {</pre>
<p>Размещаем код функции localcopy() и установщик расширений OpenCart 2.x будет работать без настроек FTP!</p>
<pre class="brush: php; title: Код:; notranslate">
public function localcopy() {
	$this-&gt;load-&gt;language('extension/installer');
	$json = array();

	if (!$this-&gt;user-&gt;hasPermission('modify', 'extension/installer')) {
		$json['error'] = $this-&gt;language-&gt;get('error_permission');
	}

	$directory = DIR_UPLOAD . str_replace(array('../', '..\\', '..'), '', $this-&gt;request-&gt;post['path']) . '/upload/';
	if (!is_dir($directory)) {
		$json['error'] = $this-&gt;language-&gt;get('error_directory');
	}

	if (!$json) {
	// Get a list of files ready to upload
	$files = array();
	$path = array($directory . '*');

		while (count($path) != 0) {
			$next = array_shift($path);
			foreach (glob($next) as $file) {
				if (is_dir($file)) {
					$path[] = $file . '/*';
				}
				$files[] = $file;
			}
		}

	$root = dirname(DIR_APPLICATION).'/';

		foreach ($files as $file) {
		// Upload everything in the upload directory
		$destination = $root.substr($file, strlen($directory));

			if (is_dir($file)) {
			$list = glob(rtrim($destination, '/').'/*');

				if (!file_exists($destination)) {
					if (!mkdir($destination)) {
						$json['error'] = sprintf($this-&gt;language-&gt;get('error_ftp_directory'), $destination);
					}
				}
			}

			if (is_file($file)) {
				if (!copy($file, $destination)) {
					$json['error'] = sprintf($this-&gt;language-&gt;get('error_ftp_file'), $file);
				}
			}
		}
	}

	$this-&gt;response-&gt;addHeader('Content-Type: application/json');
	$this-&gt;response-&gt;setOutput(json_encode($json));
}
</pre>
<p>Надеюсь данная статья была полезной и вы нашли ответ, который искали. Ставте like, подписывайтесь, впереди еще много интересного!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/06/install-ocmod-module-opencart-2-localhost-denwer-bez-ftp.html/feed</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Модули, расширения и модификации в OpenCart 2.x</title>
		<link>https://nikita-sp.com.ua/2015/04/moduli-rasshireniya-i-modifikatsii-v-opencart-2.html</link>
					<comments>https://nikita-sp.com.ua/2015/04/moduli-rasshireniya-i-modifikatsii-v-opencart-2.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sun, 19 Apr 2015 22:16:53 +0000</pubDate>
				<category><![CDATA[Интересное в мире]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[интересно]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2369</guid>

					<description><![CDATA[На протяжении последнего месяца, мне удалось более тесно познакомиться с OpenCart 2, основательно разобраться с предлагаемыми движком модификациями и установщиком модулей, а также покопаться в исходном коде OpenCart 2. Данная статья является продолжением предыдущих двух постов, посвященных первому знакомству с OpenCart 2.x а также новым возможностям OpenCart 2.x. В данном посте мы рассмотрим установщик расширений, принцип его [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>На протяжении последнего месяца, мне удалось более тесно познакомиться с OpenCart 2, основательно разобраться с предлагаемыми движком модификациями и установщиком модулей, а также покопаться в исходном коде OpenCart 2. Данная статья является продолжением предыдущих двух постов, посвященных <a title="Первое впечатление о Opencart 2.0" href="http://nikita-sp.com.ua/2015/02/pervoe-vpechatlenie-o-opencart2.html" target="_blank" data-wpel-link="internal">первому знакомству с OpenCart 2.x</a> а также <a title="Новые функции и возможности Opencart 2.0" href="http://nikita-sp.com.ua/2015/03/novyie-funktsii-i-vozmozhnosti-opencart2.html" target="_blank" data-wpel-link="internal">новым возможностям OpenCart 2.x</a>.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-mods-triggers.png" rel="lightbox[2369]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="263" itemprop="image" class="aligncenter size-medium wp-image-2388" src="http://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-mods-triggers-600x263.png" alt="OpenCart 2.x - Modifications &amp; triggers" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-mods-triggers-600x263.png 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-mods-triggers-150x66.png 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/opencart-mods-triggers.png 800w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>В данном посте мы <strong>рассмотрим установщик расширений</strong>, принцип его работы, затронем тему <strong>vQmod в OpenCart 2.x</strong>, а также рассмотрим <strong>новые возможности, предоставляемые OpenCart 2</strong>.<span id="more-2369"></span></p>
<h2>Установщик расширений OpenCart 2.x</h2>
<p>Первым, что хотелось бы рассмотреть, это <strong>установщик расширений</strong>, т.к. это, пожалуй, один из самых основных разделов административной части для разработчика интернет магазина на основе CMS OpenCart. В предыдущих статьях, ввиду отсутствия опыта работы с новой версией движка, я мало уделял внимания данному разделу, но в данной статье я постараюсь ответить на все вопросы, с которыми могут столкнуться разработчики.</p>
<p>Для начала рассмотрим из чего состоит сам архив модуля .ocmod:</p>
<ol>
<li>новые файлы (файлы модуля) &#8212; файлы для загрузки (которые не затирают основные файлы движка), находящиеся в папке upload;</li>
<li>файл install.sql для добавления таблиц в базу данных (если необходимо);</li>
<li>файл install.xml в котором хранятся инструкции по модификации основных файлов CMS Opencart (основан на принципе xml-файлов vQmod);</li>
<li>файл install.php который содержит код, который будет выполнен во время установки.</li>
</ol>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod.jpg" rel="lightbox[2369]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="138" itemprop="image" class="aligncenter size-medium wp-image-2390" src="http://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-600x138.jpg" alt="Архив Ocmod" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-600x138.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-150x35.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod.jpg 715w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-upload.jpg" rel="lightbox[2369]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="137" itemprop="image" class="aligncenter size-medium wp-image-2389" src="http://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-upload-600x137.jpg" alt="Папка upload в ocmod архиве" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-upload-600x137.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-upload-150x34.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/ocmod-upload.jpg 614w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>Как видно на скриншоте выше, структура папок в папке upload полностью повторяет стандартную структуру папок Opencart. В этих папках расположены файлы, которые будут скопированы на сервер при установке расширения.</p>
<p>Установка расширения происходит в несколько этапов:</p>
<ol>
<li>загрузка и распаковка (в случае если это архив) файлов на сервер во временную папку system/upload/;</li>
<li>если это просто .XML файл, то его содержимое будет записано в таблицу oc_modification и на этом установка закончена, а если же это архив с файлами (как в примере), то он будет разархивирован во временное хранилище;</li>
<li>проверка доступа к FTP (доступ к FTP настраивается в настройках магазина);</li>
<li>загрузка файлов из папки upload модуля;</li>
<li>выполнение запросов из .SQL файла (обновление базы данных);</li>
<li>внесение правок в существующие файлы из .XML файла (см. п.2);</li>
<li>выполнение кода из .PHP файла (спасибо, Андрей Брус);</li>
<li>проверка какие файлы будут модифицированы в ходе установки, для того чтобы выдать вам их список в окне и ожидание подтверждения об установке.</li>
</ol>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2015/04/installation-list.png" rel="lightbox[2369]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="581" height="559" itemprop="image" class="aligncenter size-full wp-image-2392" src="http://nikita-sp.com.ua/wp-content/uploads/2015/04/installation-list.png" alt="Opencart OCMOD Установка - список модифицированных файлов" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/04/installation-list.png 581w, https://nikita-sp.com.ua/wp-content/uploads/2015/04/installation-list-150x144.png 150w" sizes="auto, (max-width: 581px) 100vw, 581px" /></a></p>
<p>В конечном итоге мы получаем скопированные новые файлы в папках нашей CMS, XML файл со сценарием (инструкциями) модификации в базе данных, и кеш этих самых модификаций в папке system/modification.</p>
<p>В целом система достаточно интересная и удобная для конечного пользователя, но не для разработчика. Почему? Потому что чтобы править модификации (инструкции к изменению файлов) необходимо править базу данных. При использовании классического vQmod для OpenCart для этого было достаточно править файл.</p>
<p>Кроме очевидного минуса с точки зрения удобства модификации инструкций, присутствует определенный плюс в данном методе хранения модификаций для файлов &#8212; более защищенное хранилище. Так как в базу данных мало кто имеет доступ, а на FTP могут иметь доступ многие (например для загрузки картинок на сервер), то данный метод может иметь преимущество, однако не стоит забывать что и на FTP можно дать доступ к определенной папке. (:</p>
<p>Для себя я сделал вывод, что данная система интересная, новая, удобная, но не для разработчика (: Будем следить дальше за развитием OpenCart 2, и за развитием модификаций и расширений для этой платформы.</p>
<h2>Установка vQmod на OpenCart 2.x</h2>
<p>Многие разработчики спрашивали, возможно ли использование vQmod как на предыдущих версиях OpenCart, и мой опыт говорит о том что можно! Просто установите его как обычно и пользуйтесь на здоровье. Если возникли проблемы, или вы располагаете иной информацией &#8212; пишите в комментариях.</p>
<h2>OpenCart triggers</h2>
<p>Работая над одним из проектов, я обнаружил в коде интересную строку:</p>
<pre class="brush: php; title: Код:; notranslate">$this-&gt;event-&gt;trigger('pre.admin.attribute.add', $data);</pre>
<p><strong>UPD:</strong> чатайте полный обзор в статье <a href="http://nikita-sp.com.ua/2015/12/sistema-sobyitiy-opencart-2-ispolzovat-event.html" data-wpel-link="internal">система событий в Opencart 2.x: как использовать event</a></p>
<p>Как я понял, теперь мы (разработчики) можем использовать данные триггеры для написания функций пред- или постобработки данных перед выполнением тех или иных нативных функций. Однако какого-то определенного мануала я не нашел по данному функционалу, и скорей всего он получит большее развитие в последующих версиях OpenCart.</p>
<p>На данный момент известно, что для регистрации функции на триггер необходимо написать:</p>
<pre class="brush: php; title: Код:; notranslate">$this-&gt;event-&gt;register('post.admin.attribute.add', 'checkout/order/send_email');</pre>
<p>Однако больше информации внятной найти не удалось, если вы нашли что-то интересное или сами разобрались &#8212; пишите, дополним статью.</p>
<h2>Подведем итог</h2>
<p>В целом система развивается, обростая новыми и новыми функциями и фишками, оценить которые однозначно и объективно достаточно сложно. С моим мнением вы ознакомились, а ваше мнение буду рад прочитать в комментариях.</p>
<p>Надеюсь, очередной небольшой экскурс по новым фукнциям OpenCart 2.x был вам полезен и вы подчерпнули много новой и полезой для себя информации. Спасибо за внимание.</p>
<p><strong>UPD:</strong> ознакомьтесь с системой событий и триггеров ($this-&gt;event) в новой статье <a href="http://nikita-sp.com.ua/2015/12/sistema-sobyitiy-opencart-2-ispolzovat-event.html" data-wpel-link="internal">система событий в Opencart 2.x: как использовать event</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/04/moduli-rasshireniya-i-modifikatsii-v-opencart-2.html/feed</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Как в Opencart получить код языка по-умолчанию</title>
		<link>https://nikita-sp.com.ua/2015/03/kak-v-opencart-poluchit-kod-yazyika-po-umolchaniyu.html</link>
					<comments>https://nikita-sp.com.ua/2015/03/kak-v-opencart-poluchit-kod-yazyika-po-umolchaniyu.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Wed, 04 Mar 2015 13:00:36 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[интересно]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2346</guid>

					<description><![CDATA[Работая над модулем SEO URL для мультиязычного интернет магазина, я столкнулся с проблемой получения кода языка  по-умолчанию. Интересный факт, однако с помощью привычной конструкции, позволяющей получить настройки интернет магазина, $this-&#62;config-&#62;get(&#8216;config_language&#8217;) нельзя получить код языка пользовательской части по-умолчанию. Однако, необходимо было решить задачу, и я нашел решение. Что ж, давайте вместе разберемся с данной проблемой. В процессе [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Работая над <a title="Модуль SEO URL для мультиязычного интернет магазина на Opencart" href="http://nikita-sp.com.ua/2015/03/module-seo-url-dlya-magazina-opencart.html" target="_blank" data-wpel-link="internal">модулем SEO URL для мультиязычного интернет магазина</a>, я столкнулся с проблемой получения кода языка  по-умолчанию. Интересный факт, однако с помощью привычной конструкции, позволяющей получить настройки интернет магазина, $this-&gt;config-&gt;get(&#8216;config_language&#8217;) нельзя получить код языка пользовательской части по-умолчанию.</p>
<p><img loading="lazy" decoding="async" width="600" height="250" itemprop="image" class="aligncenter size-medium wp-image-2349" src="http://nikita-sp.com.ua/wp-content/uploads/2015/03/opencart-get-default-shop-language-600x250.jpg" alt="Opencart get default shop language" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/03/opencart-get-default-shop-language.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2015/03/opencart-get-default-shop-language-150x63.jpg 150w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>Однако, необходимо было решить задачу, и я нашел решение. Что ж, давайте вместе разберемся с данной проблемой.<span id="more-2346"></span></p>
<p>В процессе написания плагинов и модулей для Opencart, в контроллере можно получить доступ к настройкам самого магазина, или же отдельных модулей, однако каково было мое удивление, когда при разработке <a title="Модуль SEO URL для мультиязычного интернет магазина на Opencart" href="http://nikita-sp.com.ua/2015/03/module-seo-url-dlya-magazina-opencart.html" target="_blank" data-wpel-link="internal">модуля SEO URL для многоязычного интернет магазина</a>, при обращении к массиву конфигурации $this-&gt;config-&gt;get(&#8216;config_language&#8217;) я получал текущий язык, который выбрал пользователь.</p>
<p>То есть в данном массиве хранится код языка, на котором пользователь просматривает интернет магазин, и отнюдь не язык по-умолчанию: если по-молчанию стоит русский язык, а пользователь зашел и выбрал английский, то значение переменной $this-&gt;config-&gt;get(&#8216;config_language&#8217;) будет &#171;en&#187;.</p>
<p>Дело в том, что в файле index.php, где формируются все основные конфигурационные массивы и данные в данную переменную записывается значение текущего языка! Вот строки файла index.php, в которых видно, как в переменную заносится значение текущего языка:</p>
<pre class="brush: php; title: Код:; notranslate">
if (isset($session-&gt;data['language']) &amp;&amp; array_key_exists($session-&gt;data['language'], $languages) &amp;&amp; $languages[$session-&gt;data['language']]['status']) {
$code = $session-&gt;data['language'];
} elseif (isset($request-&gt;cookie['language']) &amp;&amp; array_key_exists($request-&gt;cookie['language'], $languages) &amp;&amp; $languages[$request-&gt;cookie['language']]['status']) {
$code = $request-&gt;cookie['language'];
} elseif ($detect) {
$code = $detect;
} else {
$code = $config-&gt;get('config_language');
}

if (!isset($session-&gt;data['language']) || $session-&gt;data['language'] != $code) {
$session-&gt;data['language'] = $code;
}

if (!isset($request-&gt;cookie['language']) || $request-&gt;cookie['language'] != $code) {
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request-&gt;server['HTTP_HOST']);
}

$config-&gt;set('config_language_id', $languages[$code]['language_id']);
$config-&gt;set('config_language', $languages[$code]['code']);

</pre>
<p>А как же в контроллере получить язык по-молчанию, установленный в административной части для фронтенда? После недолгого поиска необходимой информации, я пришел к выводу что сделать это все-таки можно, правда не так просто и красиво, как это можно было бы сделать, используя основной массив конфигурации.</p>
<pre class="brush: php; title: Код:; notranslate">

$this-&gt;load-&gt;model('setting/setting');
$store_settings_config = $this-&gt;model_setting_setting-&gt;getSetting(&quot;config&quot;, $this-&gt;config-&gt;get('config_store_id'));

echo $store_settings_config['config_language']; // Вот тут наш язык по-умолчанию

</pre>
<p>Вот таким вот нехитрым образом, хоть и сложнее, чем обращение в конфигурационный массив, можно получить язык пользовательской части вашего интернет магазина на Opencart по-умолчанию.</p>
<p>Данный пост размещаю тут больше, пожалуй, для себя, на будущее, однако если вы это читаете и вам помогло мое решение, не поленитесь и поставьте лайк, напишите комментарий. Заранее спасибо. Если возникли вопросы или предложения &#8212; пишите, обсудим.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/03/kak-v-opencart-poluchit-kod-yazyika-po-umolchaniyu.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Opencart PavBlog выводятся выключенные записи блога</title>
		<link>https://nikita-sp.com.ua/2015/02/opencart-pavblog-vyivodyatsya-vyiklyuchennyie-zapisi-bloga.html</link>
					<comments>https://nikita-sp.com.ua/2015/02/opencart-pavblog-vyivodyatsya-vyiklyuchennyie-zapisi-bloga.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 21 Feb 2015 09:00:57 +0000</pubDate>
				<category><![CDATA[Плагины и модули]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[интересно]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2192</guid>

					<description><![CDATA[В ходе разработки интернет магазина De Esse, обнаружил интересный факт, относительно записей блога в Pav Blog News Module для Opencart, а именно &#8212; отображение записей блога, у которых статус установлен как &#171;выключенный&#171;. Данная небольшая заметка поможет вам с легкостью устранить данную ошибку.Для того чтобы предотвратить показ выключенных записей блога Pav Blog News под Opencart, достаточно [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>В ходе <a title="Интернет магазин кожгалантереи De Esse" href="http://nikita-sp.com.ua/works/sozdanie-internet-magazina-kozhgalanterei-de-esse.html" target="_blank" data-wpel-link="internal">разработки интернет магазина De Esse</a>, обнаружил интересный факт, относительно записей блога в <strong>Pav Blog News Module для Opencart</strong>, а именно &#8212; <strong>отображение записей блога</strong>, у которых статус установлен как &#171;<strong>выключенный</strong>&#171;.</p>
<p>Данная небольшая заметка поможет вам с легкостью устранить данную ошибку.<span id="more-2192"></span>Для того чтобы предотвратить <strong>показ выключенных записей блога Pav Blog News под Opencart</strong>, достаточно лишь открыть контроллер, расположенный по адресу:</p>
<p><em>catalog/model/pavblog/blog.php</em></p>
<p>Найти в этом файле строку с текстом:</p>
<pre class="brush: php; title: Код:; notranslate">if( isset($data['not_in']) &amp;&amp; $data['not_in'] ){</pre>
<p>И перед этой строкой разместить следующую строку:</p>
<pre class="brush: php; title: Код:; notranslate">$sql .= ' AND status=1 ';</pre>
<p>Я честно говоря был в замешательстве, когда обнаружил данную оплошность разработчиков, однако данный недочет имеет место быть, и я счел полезным вам о нем сообщить, и предоставить быстрое решение этой простой проблемы.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/02/opencart-pavblog-vyivodyatsya-vyiklyuchennyie-zapisi-bloga.html/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Как добавить Google Adsense в середину записи WordPress</title>
		<link>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html</link>
					<comments>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Thu, 05 Feb 2015 10:00:24 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=2003</guid>

					<description><![CDATA[При создании сайта, если вы собираетесь его в дальнейшем монетизировать, следует обратить внимание и продумать места для размещения рекламы в будущем. И я говорю не только о Google Adsense, но и про другие рекламные блоки. Одними из популярных мест для размещения рекламных блоков является шапка сайта (начало статьи, страницы), но разместить там код рекламного баннера [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>При создании сайта, если вы собираетесь его в дальнейшем монетизировать, следует обратить внимание и продумать места для размещения рекламы в будущем. И я говорю не только о Google Adsense, но и про другие рекламные блоки.</p>
<p><img loading="lazy" decoding="async" width="500" height="400" itemprop="image" class="aligncenter size-full wp-image-2052" src="http://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text.png" alt="Как вставить рекламу в текст записи WordPress" srcset="https://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text.png 500w, https://nikita-sp.com.ua/wp-content/uploads/2015/02/adverts-in-post-text-150x120.png 150w" sizes="auto, (max-width: 500px) 100vw, 500px" /></p>
<p>Одними из популярных мест для размещения рекламных блоков является шапка сайта (начало статьи, страницы), но разместить там код рекламного баннера достаточно просто, а <strong>как разместить код</strong> того же<strong> Google Adsense в тексте записи сайта на WordPress без плагинов</strong>?</p>
<p><span id="more-2003"></span></p>
<p>Итак, для того чтобы <strong>разместить код рекламного блока Google Adsense или других рекламных площадок</strong>, вам необходимо будет отредактировать файл functions.php в папке с вашей темой.</p>
<p>Добавим в код вашего файла (можно в конец файла) следующую функцию:</p>
<pre class="brush: php; title: Код:; notranslate">function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
	$closing_p = '&lt;/p&gt;';
	$paragraphs = explode( $closing_p, $content ); // разбиваем текст статьи по параграфам
	foreach ($paragraphs as $index =&gt; $paragraph) { // пробегаемся по параграфам
		if ( trim( $paragraph ) ) {
			$paragraphs[$index] .= $closing_p; // добавляем вырезанные на 3 строке закрывающие теги параграфа
		}
		if ( $paragraph_id == $index + 1 ) { // если номер текущего параграфа = номеру требуемого - добавляем код блока
			$paragraphs[$index] .= $insertion;
		}
	}

	return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
}</pre>
<p>Данная функция позволяет разбивать текст (<em>$content</em>) ваших записей/постов блога на блоки по параграфам и вставляет после определенного номера (<em>$paragraph_id</em>) параграфа код, передаваемый в функцию в переменной <em>$insertion</em>.</p>
<p>Далее нам необходимо вызвать эту функцию при обращении к нашей записи. Для этого нам необходимо добавить строку с добавлением фильтра и функцию:</p>
<pre class="brush: php; title: Код:; notranslate">add_filter( 'the_content', 'prefix_insert_post_ads' ); // Добавляем обработку текста статьи
function prefix_insert_post_ads( $content ) { // В функцию передаем текст статьи
	$ad_code = 'Тут код вашего рекламного блока'; // Указываем код рекламного блока для вставки
	if ( is_single() &amp;&amp; ! is_admin() ) { // вызываем функцию для одиночной записи и не вызываем функцию если мы в администраторской панели
		return prefix_insert_after_paragraph( $ad_code, 2, $content ); // Если были соблюдены все правила возвращаем обработанный функцией исходный код статьи уже с кодом рекламного блока
		// передаются параметры: код рекламного блока, номер параграфа, после которого будет блок размещен, контент
	}
	return $content; // в противном случае возвращаем просто текст статьи
}
</pre>
<p>Вы можете настроить данный скрипт так как вам угодно, например вы можете скомпоновать все действия в одну функцию (мне кажется так будет удобнее и корректнее, зачем плодить функции?) таким образом:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( X == ($index + 1) ) { // X = номер параграфа
				$paragraphs[$index] .= $ad_code;
			}
		}
		return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
	}
	return $content;
}
</pre>
<p>Если вы хотите <strong>добавить несколько рекламных баннеров в текст вашей статьи</strong>, то вам необходимо добавить просто еще одно условие, например такое:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	/* Добавляем второй рекламный блок */
	$ad_code = 'Тут код вашего второго рекламного блока';
	/* Добавили второй рекламный блок */
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( X == ($index + 1) ) { // X = номер параграфа
				$paragraphs[$index] .= $ad_code;
			}
			/* Добавляем второе условие */
			if ( X2 == ($index + 1) ) { // X2 = номер второго параграфа
				$paragraphs[$index] .= $another_ad_code;
			}
			/* Добавили второе условие */
		}
		return implode( '', $paragraphs ); // совмещаем все параграфы вместе и отдаем
	}
	return $content;
}
</pre>
<p>А если вы хотите <strong>добавить рекламный блок в конец записи на сайте на WordPress</strong>, то просто добавьте условие:</p>
<pre class="brush: php; title: Код:; notranslate">
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
	$ad_code = 'Тут код вашего рекламного блока';
	if ( is_single() &amp;&amp; ! is_admin() ) {
		$closing_p = '&lt;/p&gt;';
		$paragraphs = explode( $closing_p, $content );
		$count_p = count($paragraphs);
		foreach ($paragraphs as $index =&gt; $paragraph) {
			if ( trim( $paragraph ) ) {
				$paragraphs[$index] .= $closing_p;
			}
			if ( $count_p == ($index + 1) ) {
				$paragraphs[$index] .= $ad_code;
			}
		}
		return implode( '', $paragraphs );
	}
	return $content;
}
</pre>
<p>Таким же образом вы можете <strong>добавить блок рекламных объявлений к любым</strong> другим тегам, которые вы используете при размете ваших <strong>записей на вашем сайте на CMS WordPress</strong>, которые у вас встречаются в тексте записи.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2015/02/dobavit-adsense-v-seredinu-zapisi-wordpress.html/feed</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Создание позиции вывода модулей в OpenCart</title>
		<link>https://nikita-sp.com.ua/2014/11/sozdanie-pozitsii-vyivoda-moduley-v-opencart.html</link>
					<comments>https://nikita-sp.com.ua/2014/11/sozdanie-pozitsii-vyivoda-moduley-v-opencart.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sun, 16 Nov 2014 00:07:27 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[OpenCart]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[интернет магазин]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1715</guid>

					<description><![CDATA[При создании интернет магазинов дизайн играет немаловажную роль. И случается так, что возможностей по выводу модулей OpenCart не хватает. Например вам необходимо вывести модуль в низу страницы (футере) или в другом месте, которое не указано в стандартных расположениях (верх и низ страницы, левая и правая колонка &#8212; position). Для решения данной проблемы необходимо создать новое расположение. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>При создании интернет магазинов дизайн играет немаловажную роль. И случается так, что возможностей по выводу модулей OpenCart не хватает. Например вам необходимо вывести модуль в низу страницы (футере) или в другом месте, которое не указано в стандартных расположениях (верх и низ страницы, левая и правая колонка &#8212; position).</p>
<p>Для решения данной проблемы необходимо создать новое расположение. Сделать это очень просто следуя инструкции.<span id="more-1715"></span></p>
<p>1. Создать файл шаблона для вашей позиции (расположения). Для этого можете скопировать любой уже имеющийся шаблон и переименовать его согласно желаемому названию, например <em>content_category_filter.tpl</em>.</p>
<p>&nbsp;</p>
<p>2. Создать контроллер для вашей позиции. Опять таки можете скопировать любой уже имеющийся контроллер, однако тут придется его отредактировать. В первую очередь необходимо изменить класс в нашем случае на <em>ControllerCommonContentCategoryFilter</em>. Далее найти строку вида:</p>
<pre class="brush: php; title: Код:; notranslate">if ($module['layout_id'] == $layout_id &amp;&amp; $module['position'] == 'content_top' &amp;&amp; $module['status']) {</pre>
<p>Как видите в данной строке отсеиваются включенные модули которые определены к выводу в верхней части страницы, на что указывает <em>content_top</em>, соответственно заменяем на <em>content_category_filter</em> и получаем следующий вид строки:</p>
<pre class="brush: php; title: Код:; notranslate">if ($module['layout_id'] == $layout_id &amp;&amp; $module['position'] == 'content_category_filter' &amp;&amp; $module['status']) {</pre>
<p>Далее также заменяем имя шаблона для вывода в строках 69-72, указывая на шаблон, созданный в п.1. Получаем вот такой кусок кода:</p>
<pre class="brush: php; title: Код:; notranslate">if (file_exists(DIR_TEMPLATE . $this-&gt;config-&gt;get('config_template') . '/template/common/content_category_filter.tpl')) {
$this-&gt;template = $this-&gt;config-&gt;get('config_template') . '/template/common/content_category_filter.tpl';
} else {
$this-&gt;template = 'default/template/common/content_category_filter.tpl';}</pre>
<p>&nbsp;</p>
<p>3. Теперь необходимо подключить нашу позицию для вывода на страницы, где будут выводиться модули, находящиеся в этой позиции. Для этого откройте контроллер любой страницы, например категорий (category.php) и найдите строки:</p>
<pre class="brush: php; title: Код:; notranslate">$this-&gt;children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);</pre>
<p>Сюда нам необходимо добавить подключение нашей позиции. Просто впишите ее в массив. <strong>Обратите внимание</strong>: если вы подключите ее последним элементом (добавите в конец массива, после common/header), то скрипты и стили не будут подключены! Рекомендуется подключать свою позицию исключительно перед footer и header! Например:</p>
<pre class="brush: php; title: Код:; notranslate">$this-&gt;children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/content_category_filter',
'common/footer',
'common/header'
);</pre>
<p>&nbsp;</p>
<p>4. Подключив позицию в контроллере нам необходимо вывести ее в шаблоне. Сделать это достаточно просто, вписав в нужное место в шаблоне страницы название переменной позиции, например:</p>
<pre class="brush: php; title: Код:; notranslate">&lt;?php echo $content_category_filter; ?&gt;</pre>
<p>&nbsp;</p>
<p>5. Теперь перейдем к административной части. Чтобы мы могли указать нашу позицию какому-нибудь модулю нам необходимо открыть файл (администраторского) шаблона данного модуля, например admin/view/template/module/category.tpl и найти строки, содержащие выпадающий список позиций. Для этого просто ищите по документу строку <em>[position]</em> или <em>content_bottom</em>.</p>
<p>В стандартных шаблонах данная переменная встречается 2 раза:</p>
<ol>
<li>При выводе уже имеющихся модулей в html;</li>
<li>При добавлении нового модуля в JavaScript.</li>
</ol>
<p>В прочих модулях количество вхождений может быть больше. После того как вы нашли нужный select просто добавьте ему новую опцию со значением новой позиции, например:</p>
<pre class="brush: php; title: Код:; notranslate">&lt;?php if ($module['position'] == 'content_category_filter') { ?&gt;
&lt;option value=&quot;content_category_filter&quot; selected=&quot;selected&quot;&gt;content_category_filter&lt;/option&gt;
&lt;?php } else { ?&gt;
&lt;option value=&quot;content_category_filter&quot;&gt;content_category_filter&lt;/option&gt;
&lt;?php } ?&gt;</pre>
<p>Тоже самое необходимо проделать и с JS частью, например:</p>
<pre class="brush: jscript; title: Код:; notranslate">html += '      &lt;option value=&quot;content_category_filter&quot;&gt;content_category_filter&lt;/option&gt;';</pre>
<p>После этого при редактировании модуля вам будет доступна новая позиция.</p>
<p><a href="http://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart.jpg" rel="lightbox[1715]" data-wpel-link="internal"><img loading="lazy" decoding="async" width="600" height="54" itemprop="image" class="aligncenter size-medium wp-image-1754" src="http://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart-600x54.jpg" alt="Create new position opencart" srcset="https://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart-600x54.jpg 600w, https://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart-960x87.jpg 960w, https://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart-150x13.jpg 150w, https://nikita-sp.com.ua/wp-content/uploads/2014/11/create_new_position_opencart.jpg 1831w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>Позиция создана, модуль выведен. Действия 3 и 4 необходимо проделать со всеми страницами, на которых вам необходимо вывести позицию. Все файлы вы можете найти с помощью поиска по содержимому файлов если искать например <em>content_top</em> или <em>content_bottom</em> &#8212; это нативные (стандартные) позиции. Также действие 5 необходимо повторить для каждого из модулей отдельно.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/11/sozdanie-pozitsii-vyivoda-moduley-v-opencart.html/feed</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Создать скрытые поля для Contact Form 7</title>
		<link>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html</link>
					<comments>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Sat, 09 Aug 2014 01:58:08 +0000</pubDate>
				<category><![CDATA[Статьи о php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1318</guid>

					<description><![CDATA[Плагин Contact Form 7 является одним из самых популярных модулей для WordPress для создания формы обратной связи. Тут просто создаются и редактируются поля, настраивается формат письма и многое другое. НО! К сожалению, не знаю почему, разработчики решили не добавлять скрытый тип поля (&#60;input type=&#187;hidden&#187; &#8230;&#62;). Для чего он нужен? Ну например чтобы передавать данные о [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Плагин <strong>Contact Form 7</strong> является одним из самых популярных модулей для <strong>WordPress</strong> для создания формы обратной связи. Тут просто создаются и редактируются поля, настраивается формат письма и многое другое. НО! К сожалению, не знаю почему, разработчики решили не добавлять скрытый тип поля (<em>&lt;input type=&#187;hidden&#187; &#8230;&gt;</em>).</p>
<p>Для чего он нужен? Ну например чтобы передавать данные о пользователе (IP, браузер и т.п.), данные о странице откуда отправили форму, или откуда перешли чтобы отправить форму (какая страница поспособствовала переходу в раздел контактов) и еще куча возможных применений!</p>
<p>Все это вы можете себе позволить, написав просто обработку нового <em>shortcode</em> (тега, шорт кода) в шаблоне контактной формы. По-умолчанию существуют такие теги как <em>text</em>, <em>email</em>, <em>textarea</em>, которые также сопровождаются параметрами: обязательное или не обязательное поле и многое другое.<span id="more-1318"></span></p>
<p>Теперь мы создадим новый тег <em>hidden</em> и в шаблоне добавим его как обычный тег с именем <em>[hidden inputName]</em>. Само имя тега <em>inputName</em> мы внесем в тело нашего сообщения. И остается только в файле functions.php прописать следующий код для обработки <strong>shortcode</strong>&#8216;а:</p>
<pre class="brush: php; title: Код:; notranslate">
// Register new shortcode for getting pages where contact form was send
function hidden($tag) {
    if ( ! is_array( $tag ) )
        return '';

if($tag['name'] == &quot;referer&quot;){
    $pageURL = 'http';
    if ($_SERVER[&quot;HTTPS&quot;] == &quot;on&quot;) {
        $pageURL .= &quot;s&quot;;
    }
    $pageURL .= &quot;://&quot;;
    if ($_SERVER[&quot;SERVER_PORT&quot;] != &quot;80&quot;) {
        $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].&quot;:&quot;.$_SERVER[&quot;SERVER_PORT&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    } else {
        $pageURL .= $_SERVER[&quot;SERVER_NAME&quot;].$_SERVER[&quot;REQUEST_URI&quot;];
    }
    $html = '&lt;input type=&quot;'.$tag['basetype'].'&quot; name=&quot;' . $tag['name'] . '&quot; value=&quot;'.$pageURL.'&quot; /&gt;';
}else{
    $html = '&lt;input type=&quot;'.$tag['basetype'].'&quot; name=&quot;' . $tag['name'] . '&quot; value=&quot;&quot; /&gt;';
}
    return $html;
}
if(function_exists(&quot;wpcf7_add_shortcode&quot;)){
    wpcf7_add_shortcode('hidden', 'hidden', true);
}</pre>
<p>В данном примере функции рассмотрен вариант отправки адреса страницы, откуда была отправлена форма, в случае если поле называется <em>referer</em>, в противном случае будет выводиться пустое скрытое поле, таким образом вы можете подвязать для себя по названию несколько скрытых полей.</p>
<p>На этом вроде все, если возникают вопросы &#8212; пишите в раздел вопросов и ответов, пишите комментарии, ставьте лайки!<br />
Удачного коддинга!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/08/sozdat-skryityie-polya-dlya-contact-form-7.html/feed</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Hypercomments WordPress для разных типов записей</title>
		<link>https://nikita-sp.com.ua/2014/05/hypercomments-wordpress-dlya-raznyih-tipov-zapisey.html</link>
					<comments>https://nikita-sp.com.ua/2014/05/hypercomments-wordpress-dlya-raznyih-tipov-zapisey.html#disqus_thread</comments>
		
		<dc:creator><![CDATA[Nikita_Sp]]></dc:creator>
		<pubDate>Fri, 30 May 2014 00:30:45 +0000</pubDate>
				<category><![CDATA[Плагины и модули]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://nikita-sp.com.ua/?p=1226</guid>

					<description><![CDATA[Сегодня все больше и больше информации появляется в сети Интернет. Все больше и больше компаний заказывают разработку сайтов и представляют всему миру свой продукт. Социальные сети &#8212; это мощный инструмент для продвижения продуктов и услуг на интернет-рынке. Таким образом страницы сайтов пестрят виджетами и плагинами социальных сетей: вступите в нашу группу, поставьте лайк, сделайте репост. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Сегодня все больше и больше информации появляется в сети Интернет. Все больше и больше компаний <strong>заказывают разработку сайтов</strong> и представляют всему миру свой продукт. <strong>Социальные сети &#8212; это мощный инструмент</strong> для продвижения продуктов и услуг на интернет-рынке. Таким образом страницы сайтов пестрят виджетами и плагинами социальных сетей: вступите в нашу группу, поставьте лайк, сделайте репост. Эта &#171;социализация&#187; интернета дошла до того что уже около полугода-год группы, компании и фирмы разыгрывают призы с помощью лайков. Чтобы выиграть достаточно сделать репост записи.</p>
<p>Каждая социальная сеть (ФейсБук и ВКонтакте, например) предоставляет возможность использовать <strong>виджет комментариев</strong> для вашего ресурса, который дает возможность пользователям этой социальной сети оставить комментарий, и вы не будете волноваться на счет спама, роботов и прочих неприятностей, связанных с открытыми комментариями к вашей странице.<br />
<span id="more-1226"></span><br />
Но ведь если существует минимум две социальные <span style="text-decoration: underline;">глобальные</span> сети, то необходимо учитывать пользователей обеих! Использовать один? Теряем пользователей второй сети. Использовать два виджета комментариев? Не рационально и неудобно. Что же делать?</p>
<p>На этот вопрос уже нашли ответы разработчики таких систем как:</p>
<ul>
<li>Disqus.com</li>
<li>IntenseDebate.com</li>
<li>Cackle.ru</li>
<li>HyperComments.com</li>
</ul>
<p>Я решил использовать именно <strong>HyperComments</strong>, т.к. список сетей, поддерживаемых сервисом более подходит для моей аудитории и он более гибок в настройках. Но столкнулся с вопросом, что этот виджет прикрепляется ко всем типам записей (<strong>custom post type</strong>).</p>
<p>Такой поворот меня не устроил, т.к. виджет может быть встроен один раз в страницу, а некоторые разделы моего сайта требуют несколько форм комментариев на одной странице. И я начал копать код плагина.</p>
<p>В итоге, мной было придумано решение, которое уникально и подойдет для любого сайта, и я думаю для любой версии плагина HyperComments и не снесется при обновлении.</p>
<p>Собственно решение заключается в удалении фильтра для &#171;<em>the_content</em>&#187; и переопределение функции в файле вашей темы <strong>functions.php</strong>. Код, который необходимо скопировать себе в файл выглядит так:</p>
<pre class="brush: php; title: Код:; notranslate">remove_filter( 'the_content', 'hc_the_content_filter', 50 );
add_filter('the_content', 'hc_the_content_filter_custom_posts_type', 50);
function hc_the_content_filter_custom_posts_type( $content )
{
    global $post;
    global $is_append;
    global $user;

    $parse = parse_url($post-&gt;guid);
    if(get_option('hc_root')){
        $url = str_replace('https://','',str_replace('http://','',str_replace('www.','',$post-&gt;guid)));
    }else{
        $url = str_replace('https://','',str_replace('http://','',str_replace('www.','',str_replace($parse['host'], get_option('home'), $post-&gt;guid))));
    }
    if(get_option('hc_title_widget')){
        if($post-&gt;comment_status == 'open'){
            if ( !is_singular()){
                $content = sprintf(
                    '%s&lt;div class=&quot;hc_content_comments&quot; data-xid=&quot;'.$url.'&quot;&gt;&lt;/div&gt;',
                  $content
                );
            }
        }
    }

    if(is_singular()){
        // Nikita_Sp hack for DW Q&amp;A comments work
        if($post-&gt;comment_status == 'open' &amp;&amp; $post-&gt;post_type != 'custom-post-type' &amp;&amp; $post-&gt;post_type != 'your-second-post-custom-type'){
            $is_append = true;
            $widget = hc_get_comment_widget(
                get_option('hc_wid'),
                hc_get_language(),
                $url,
                hc_get_auth(),
                get_option('hc_append'),
                get_option('hc_word_limit'),
                get_option('hc_realtime'),
                get_option('hc_comments_level'),
                get_option('hc_css')
            );
            $content = $content.$widget;
        }
    }
    return $content;
}</pre>
<p>Сама функция является оригиналом фильтра для контента записи из плагина HyperComments, ну а дополнительное условие включено под соответствующим комментарием.</p>
<p>На этом все. Удачной социальной интеграции, если есть вопросы &#8212; пишите в комментарии или в соответствующий раздел <a title="Вопросы и ответы" href="http://nikita-sp.com.ua/qanda" data-wpel-link="internal">Вопросов и ответов</a>.<br />
Не забываем ставить &#171;лайк&#187; и рассказывать друзьям! Спасибо!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nikita-sp.com.ua/2014/05/hypercomments-wordpress-dlya-raznyih-tipov-zapisey.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
