<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум ReadyScript &mdash; Голосование за комментарий]]></title>
		<link>https://forum.readyscript.ru/topic/1805/golosovanie-za-kommentarii/</link>
		<atom:link href="https://forum.readyscript.ru/feed/rss/topic/1805/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Голосование за комментарий».]]></description>
		<lastBuildDate>Tue, 04 Jun 2019 13:28:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10043/#p10043</link>
			<description><![CDATA[<p>id вычисляется для каждого блока отдельно. Он нужен только для определения для какого блока запрос. Поэтому он и постоянный. Можете добавить в {csrf}, но тогда придется и его Вам проверять.</p><p>Лучше использовать не submit, а помешивать в <strong>data</strong> параметр или <strong>action</strong> вашего аякс запроса.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Tue, 04 Jun 2019 13:28:55 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10043/#p10043</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10042/#p10042</link>
			<description><![CDATA[<div class="codebox"><pre><code>    function actionIndex()
    {
        $api = new \Comments\Model\Api();
        $comment_id = $this-&gt;url-&gt;request(&#039;id&#039;, TYPE_INTEGER);
        $help = $this-&gt;url-&gt;request(&#039;help&#039;, TYPE_STRING);
        $api-&gt;markHelpful($comment_id, $help);
        $this-&gt;result-&gt;setSuccess(true)-&gt;addSection(&#039;count&#039;, $api-&gt;getUsefulCount($comment_id));
        return $this-&gt;result;
        
    }</code></pre></div><p>COUNT передать получилось. Значение useful выводится.<br />Теперь мучаюсь передать значение help. Форма не подхватывает value у submit&#039;a. <br />Почему {$this_controller-&gt;myBlockIdInput()} выводит одинаковый block_id для каждой формы?</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Tue, 04 Jun 2019 12:49:17 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10042/#p10042</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10037/#p10037</link>
			<description><![CDATA[<p>Ну вы HTML и не передаёте </p><div class="codebox"><pre><code>$this-&gt;result-&gt;addSection(&#039;count&#039;, $this-&gt;$api-&gt;getUsefulCount());</code></pre></div><p>Ито у Вас туда не зашло. Посмотрите почему через var_dump на разных участках. Но скорее всего isMyPost() не сработал, т.к. там проверяется <strong>id</strong> блока контента, попробуйте просто через <strong>isPost</strong></p><p>Если нужно передавать HTML, то должна быть конструкция, иначе будет <strong>null</strong><br /></p><div class="codebox"><pre><code>$this-&gt;result-&gt;setTemplate(&#039;Путь к шаблону&#039;);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Tue, 04 Jun 2019 12:40:26 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10037/#p10037</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10036/#p10036</link>
			<description><![CDATA[<p>В ответ приходит <br /></p><div class="codebox"><pre><code>{html: null}
html: null</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Tue, 04 Jun 2019 11:54:03 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10036/#p10036</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10035/#p10035</link>
			<description><![CDATA[<p>У вас ответ от Ajax какой приходит? Он приходит в виде JSON примерно так:<br /></p><div class="codebox"><pre><code>{
   success: true,
   html: &quot;Содержимое ответа&quot;
}</code></pre></div><p>В Вашем случае будет ещё секция &quot;count&quot;</p><p>А вы пытаетесь JSON вставить вместо HTML<br />Соответственно нужно смотреть, что у Вас в ответе через console.log и тогда доставать, если данные пришли. А судя из контроллера у Вас там возвращается только count секция без html. <br />Получается, что нужный Вам ответ лежит в <strong>response[&#039;count&#039;]</strong> . Посмотрите что у Вас приходит в панели console и network (XHR) браузера.</p><br /><br /><p>И это не нужно<br /></p><div class="codebox"><pre><code> $this-&gt;result-&gt;checkAjaxOutput(true); // Форсим AJAX</code></pre></div><p>Система сама выдаст всё JSON формате.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Tue, 04 Jun 2019 11:23:39 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10035/#p10035</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10026/#p10026</link>
			<description><![CDATA[<p>Код фронт-контроллера<br /></p><div class="codebox"><pre><code>    function actionIndex()
    {

        if ($this-&gt;isMyPost()){
            $id = $this-&gt;url-&gt;request(&#039;id&#039;, TYPE_INTEGER);
            $help = $this-&gt;url-&gt;request(&#039;help&#039;, TYPE_STRING);
            if (!empty($id)) {
                $api = new \Comments\Model\Api();
                $api-&gt;markHelpful($id, $help);
                
            }
            if ($this-&gt;url-&gt;isAjax()) {
                $this-&gt;result-&gt;checkAjaxOutput(true); // Форсим AJAX
                $this-&gt;result-&gt;addSection(&#039;count&#039;, $this-&gt;$api-&gt;getUsefulCount());
            }
        }
        

        return $this-&gt;result;

    }</code></pre></div><p>Код шаблона tpl<br /></p><div class="codebox"><pre><code>{addjs file=&quot;%comments%/vote.js&quot;}
{foreach $commentlist as $comment}
&lt;li {$comment-&gt;getDebugAttributes()}&gt;
    &lt;div class=&quot;info&quot;&gt;
        &lt;p class=&quot;starsSection&quot;&gt;&lt;span class=&quot;stars&quot; title=&quot;{$comment-&gt;getRateText()}&quot;&gt;&lt;i class=&quot;mark{$comment.rate}&quot;&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
        &lt;p class=&quot;date&quot;&gt;{$comment.dateof|dateformat:&quot;@date @time&quot;}&lt;/p&gt;
        &lt;p class=&quot;name&quot;&gt;{$comment.user_name}&lt;/p&gt;
    &lt;/div&gt;
&lt;div class=&quot;comment&quot;&gt;
        &lt;i class=&quot;corner&quot;&gt;&lt;/i&gt;
        &lt;p&gt;{$comment.message|nl2br}&lt;/p&gt;
            &lt;div id=&quot;VoteMode&quot;&gt;
                {if $success}
                    {$success}
                {/if}
                {if $error}
                    {$error}
                {/if}
    &lt;form action=&quot;{$router-&gt;getUrl(&#039;comments-front-help&#039;)}&quot; method=&quot;POST&quot; class=&quot;formStyle&quot;&gt;
        {$this_controller-&gt;myBlockIdInput()}
        &lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;{$comment.id}&quot;&gt;
        &lt;input type=&quot;submit&quot; name=&quot;help&quot; value=&quot;yes&quot;/&gt;    
        &lt;input type=&quot;submit&quot; name=&quot;help&quot; value=&quot;no&quot;/&gt;            
    &lt;/form&gt;
        &lt;div id=&quot;useful&quot;&gt;
        {$comment.useful}
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
{/foreach}</code></pre></div><p>Код JS<br /></p><div class="codebox"><pre><code>$(function() {
    $(&quot;body&quot;).on(&#039;submit&#039;, &#039;#VoteMode form&#039;, function(){
        var $_this = $(&quot;#VoteMode&quot;);
        var data   = $(this).serialize();
        $.ajax({
            type : &#039;POST&#039;,
            url : $(this).attr(&#039;action&#039;),
            data : data,
            dataType : &#039;json&#039;,
            beforeSend: function() {
                        $(&#039;#useful&#039;).html(&#039;&lt;i class=&quot;fa fa-spinner fa-spin fa-fw&quot;&gt;&lt;/i&gt;&#039;);
            },
            success : function(response){
                $(&#039;#useful&#039;).html(response);
            }
        });
        return false;
    });
});</code></pre></div><p>Функция в API<br /></p><div class="codebox"><pre><code>    function getUsefulCount() {
        
        $comment = new \Comments\Model\Orm\Comment();
        $res = \RS\Orm\Request::make()
                        -&gt;select(&#039;useful AS count&#039;)
                        -&gt;from($comment)
                        -&gt;where(array(&#039;id&#039; =&gt; $id))
                        -&gt;exec()-&gt;fetchRow(); 

        return $res[&#039;count&#039;];
    }</code></pre></div><p>Если без ajax при переходе на следующую страницу выводит значение useful. Но если подключаю ajax значение просто пропадает. Голову сломал не пойму что делаю не так.</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Fri, 31 May 2019 06:34:34 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10026/#p10026</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10025/#p10025</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Теперь не могу понять как сделать что бы при нажатии на кнопку не переходило на другую страницу</p></blockquote></div><p>Это называется AJAX запрос.<br />Т.е. нужно форму обрабатывать через javascript, собирая данные. Т.к. в чистом виде у Вас будет переход как и получилось. Это можно сделать через <strong>jquery serialize</strong> и уже потом в json формате принимать ответ. Если вы к любой странице в публичной части обратитесь через AJAX, то в ответ придет json с нужными данными.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Thu, 30 May 2019 12:56:23 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10025/#p10025</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10024/#p10024</link>
			<description><![CDATA[<div class="quotebox"><cite>Валентин пишет:</cite><blockquote><p>Похожий вопрос (голосование за комментарий)<br />Как можно реализовать, чтобы при клике на ссылки <br /></p><div class="codebox"><pre><code>&lt;a href=&quot;&quot;&gt;&lt;span&gt;+&lt;/span&gt;{$comment.help_yes}&lt;/a&gt;  
&lt;a href=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;{$comment.help_yes}&lt;/a&gt;             </code></pre></div><p>значение $comment.help_yes увеличивалось/уменьшалось на 1</p></blockquote></div><p>Чем Вас не устроило готовое? )))<br /><a href="http://marketplace.readyscript.ru/addons/ulcomments/">http://marketplace.readyscript.ru/addons/ulcomments/</a></p><p>Нужно делать через javascript АЯКС запросы к контроллеру. Который уже и будет увеличивать/уменьшать значение.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Thu, 30 May 2019 12:52:34 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10024/#p10024</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10023/#p10023</link>
			<description><![CDATA[<p>Как реализовать эту функцию я понял.<br />Создал Фронт контроллер и там задействовал функцию.<br />Теперь не могу понять как сделать что бы при нажатии на кнопку не переходило на другую страницу<br />Код шаблона: <br /></p><div class="codebox"><pre><code>        &lt;form action=&quot;{$router-&gt;getUrl(&#039;comments-front-del&#039;)}&quot; method=&quot;POST&quot; class=&quot;formStyle&quot;&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;id&quot; value=&quot;{$comment.id}&quot;&gt;
            &lt;input type=&quot;submit&quot; name=&quot;help&quot; value=&quot;yes&quot;/&gt;
        &lt;/form&gt;</code></pre></div><p>Код фронт-контроллера<br /></p><div class="codebox"><pre><code>  function actionIndex()
    {
       $id = $this-&gt;url-&gt;request(&#039;id&#039;, TYPE_INTEGER);
       $help = $this-&gt;url-&gt;request(&#039;help&#039;, TYPE_INTEGER);
        if (!empty($id)) {
            $comment = new \Comments\Model\Api();
            $comment-&gt;markHelpful($id, $help);
        }
        
        if (!$this-&gt;url-&gt;request(&#039;dialogMode&#039;, TYPE_INTEGER)) {
            $this-&gt;result-&gt;setAjaxWindowRedirect($this-&gt;url-&gt;getSavedUrl($this-&gt;controller_name.&#039;index&#039;));
        }
        
        return $this-&gt;result-&gt;setTemplate( &#039;activate.tpl&#039; );
    }</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Thu, 30 May 2019 11:52:10 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10023/#p10023</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10022/#p10022</link>
			<description><![CDATA[<p>Да, вопрос аналогичный как у Валентина. Но и с другой стороны хочется понять как обращаться к функции из шаблона.</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Thu, 30 May 2019 07:48:25 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10022/#p10022</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10021/#p10021</link>
			<description><![CDATA[<p>Похожий вопрос (голосование за комментарий)<br />Как можно реализовать, чтобы при клике на ссылки <br /></p><div class="codebox"><pre><code>&lt;a href=&quot;&quot;&gt;&lt;span&gt;+&lt;/span&gt;{$comment.help_yes}&lt;/a&gt;  
&lt;a href=&quot;&quot;&gt;&lt;span&gt;-&lt;/span&gt;{$comment.help_yes}&lt;/a&gt;             </code></pre></div><p>значение $comment.help_yes увеличивалось/уменьшалось на 1</p>]]></description>
			<author><![CDATA[null@example.com (Валентин)]]></author>
			<pubDate>Wed, 29 May 2019 13:48:45 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10021/#p10021</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10020/#p10020</link>
			<description><![CDATA[<p>Задачу полностью опишите.</p>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Wed, 29 May 2019 13:12:06 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10020/#p10020</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10017/#p10017</link>
			<description><![CDATA[<p>Это надо контроллер дописывать или как то через шаблон использовать?<br />Извините, не силен, только учусь.</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Wed, 29 May 2019 09:02:25 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10017/#p10017</guid>
		</item>
		<item>
			<title><![CDATA[Re: Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10014/#p10014</link>
			<description><![CDATA[<p>У вас вверху и название класса, а чуть выше и namespace. Соответственно т.к. функция не приватная, то основы PHP нам говорят, что нужно объявить экземпляр класса и вызвать функцию.</p><div class="codebox"><pre><code>$api = new \Нэйспейс\Имякласса();
$api-&gt;markHelpful(МоиАргументыЭтойФункции);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Закусило Александр)]]></author>
			<pubDate>Wed, 29 May 2019 07:52:56 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10014/#p10014</guid>
		</item>
		<item>
			<title><![CDATA[Голосование за комментарий]]></title>
			<link>https://forum.readyscript.ru/post/10013/#p10013</link>
			<description><![CDATA[<p>Добрый день.<br />Увидел в коде для реализации комментирования, что есть голосование.<br /></p><div class="codebox"><pre><code>  function markHelpful($comment_id, $help)
    {
        $help = ($help == &#039;yes&#039;) ? 1 : -1;
        
        $vote = new Orm\Vote();
        $vote[&#039;ip&#039;] = $_SERVER[&#039;REMOTE_ADDR&#039;];
        $vote[&#039;comment_id&#039;] = $comment_id;
        $vote[&#039;help&#039;] = $help;
        $vote-&gt;replace();
        
        //Пересчитываем количество положительных и отрицательных оценок у комментария
        \RS\Orm\Request::make()
            -&gt;update($this-&gt;obj_instance)
            -&gt;set(&quot;help_yes = (SELECT COUNT(*) FROM &quot;.$vote-&gt;_getTable().&quot; WHERE comment_id = id AND help=1)&quot;)
            -&gt;set(&quot;help_no = (SELECT COUNT(*) FROM &quot;.$vote-&gt;_getTable().&quot; WHERE comment_id = id AND help=&#039;-1&#039;)&quot;)
            -&gt;set(&quot;useful = (SELECT SUM(help) FROM &quot;.$vote-&gt;_getTable().&quot; WHERE comment_id = id)&quot;)
            -&gt;where(array(&#039;id&#039; =&gt; $comment_id))
            -&gt;exec();
    }</code></pre></div><p>Как обратиться к этой функции ?</p>]]></description>
			<author><![CDATA[null@example.com (Александр)]]></author>
			<pubDate>Wed, 29 May 2019 07:28:09 +0000</pubDate>
			<guid>https://forum.readyscript.ru/post/10013/#p10013</guid>
		</item>
	</channel>
</rss>
