<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум ReadyScript &mdash; Голосование за комментарий]]></title>
	<link rel="self" href="https://forum.readyscript.ru/feed/atom/topic/1805/" />
	<updated>2019-06-04T13:28:55Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.readyscript.ru/topic/1805/golosovanie-za-kommentarii/</id>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10043/#p10043" />
			<content type="html"><![CDATA[<p>id вычисляется для каждого блока отдельно. Он нужен только для определения для какого блока запрос. Поэтому он и постоянный. Можете добавить в {csrf}, но тогда придется и его Вам проверять.</p><p>Лучше использовать не submit, а помешивать в <strong>data</strong> параметр или <strong>action</strong> вашего аякс запроса.</p>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-06-04T13:28:55Z</updated>
			<id>https://forum.readyscript.ru/post/10043/#p10043</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10042/#p10042" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-06-04T12:49:17Z</updated>
			<id>https://forum.readyscript.ru/post/10042/#p10042</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10037/#p10037" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-06-04T12:40:26Z</updated>
			<id>https://forum.readyscript.ru/post/10037/#p10037</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10036/#p10036" />
			<content type="html"><![CDATA[<p>В ответ приходит <br /></p><div class="codebox"><pre><code>{html: null}
html: null</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-06-04T11:54:03Z</updated>
			<id>https://forum.readyscript.ru/post/10036/#p10036</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10035/#p10035" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-06-04T11:23:39Z</updated>
			<id>https://forum.readyscript.ru/post/10035/#p10035</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10026/#p10026" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-05-31T06:34:34Z</updated>
			<id>https://forum.readyscript.ru/post/10026/#p10026</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10025/#p10025" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Теперь не могу понять как сделать что бы при нажатии на кнопку не переходило на другую страницу</p></blockquote></div><p>Это называется AJAX запрос.<br />Т.е. нужно форму обрабатывать через javascript, собирая данные. Т.к. в чистом виде у Вас будет переход как и получилось. Это можно сделать через <strong>jquery serialize</strong> и уже потом в json формате принимать ответ. Если вы к любой странице в публичной части обратитесь через AJAX, то в ответ придет json с нужными данными.</p>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-05-30T12:56:23Z</updated>
			<id>https://forum.readyscript.ru/post/10025/#p10025</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10024/#p10024" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-05-30T12:52:34Z</updated>
			<id>https://forum.readyscript.ru/post/10024/#p10024</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10023/#p10023" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-05-30T11:52:10Z</updated>
			<id>https://forum.readyscript.ru/post/10023/#p10023</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10022/#p10022" />
			<content type="html"><![CDATA[<p>Да, вопрос аналогичный как у Валентина. Но и с другой стороны хочется понять как обращаться к функции из шаблона.</p>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-05-30T07:48:25Z</updated>
			<id>https://forum.readyscript.ru/post/10022/#p10022</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10021/#p10021" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Валентин]]></name>
				<uri>https://forum.readyscript.ru/user/1180/</uri>
			</author>
			<updated>2019-05-29T13:48:45Z</updated>
			<id>https://forum.readyscript.ru/post/10021/#p10021</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10020/#p10020" />
			<content type="html"><![CDATA[<p>Задачу полностью опишите.</p>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-05-29T13:12:06Z</updated>
			<id>https://forum.readyscript.ru/post/10020/#p10020</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10017/#p10017" />
			<content type="html"><![CDATA[<p>Это надо контроллер дописывать или как то через шаблон использовать?<br />Извините, не силен, только учусь.</p>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-05-29T09:02:25Z</updated>
			<id>https://forum.readyscript.ru/post/10017/#p10017</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10014/#p10014" />
			<content type="html"><![CDATA[<p>У вас вверху и название класса, а чуть выше и namespace. Соответственно т.к. функция не приватная, то основы PHP нам говорят, что нужно объявить экземпляр класса и вызвать функцию.</p><div class="codebox"><pre><code>$api = new \Нэйспейс\Имякласса();
$api-&gt;markHelpful(МоиАргументыЭтойФункции);</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Закусило Александр]]></name>
				<uri>https://forum.readyscript.ru/user/20/</uri>
			</author>
			<updated>2019-05-29T07:52:56Z</updated>
			<id>https://forum.readyscript.ru/post/10014/#p10014</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Голосование за комментарий]]></title>
			<link rel="alternate" href="https://forum.readyscript.ru/post/10013/#p10013" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Александр]]></name>
				<uri>https://forum.readyscript.ru/user/505/</uri>
			</author>
			<updated>2019-05-29T07:28:09Z</updated>
			<id>https://forum.readyscript.ru/post/10013/#p10013</id>
		</entry>
</feed>
