News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

AjaxQuickReply 1-0-3 funciona mal em meu tema

Started by Nícholas Carballo, December 02, 2010, 04:01:27 PM

Previous topic - Next topic

Nícholas Carballo

Hoje decidi fazer a instalação do mod ajax_quick_reply_1-0-3 em meu fórum,antes eu fiz o teste do enhanced_quick_reply-2.0_New em português no tema default e depois instalei ajax_quick_reply_1-0-3 também no tema default,fiz o teste e tudo funcionou perfeitamente,começei a alterar os códigos para que funcionasse em meu tema,que é personalizado e diferente do default,o mod enhanced_quick_reply-2.0_New foi instalado sem problema algum,porém,o mod ajax_quick_reply_1-0-3 funciona de forma estranha no meu tema,eu coloco a mensagem e aperto o botão enviar a mensagem do ajax em processamento é dada e a mensagem não aparece em baixo e sim emcima! isso é super estranho,ele aparece logo após a primeira mensagem depois que eu atualizo a página ele aparece na última,uma outra coisa que eu notei foi que quando tem um tópico sem respostas e eu uso a resposta rápida a mensagem vai para baixo normalmente,para você entederem melhor vou colocar screen shot e o código de alteração do mod alterado por mim,o display.template.php antigo e o novo depois da alteração.

ai está o tópico vázio apenas com a mensagem dele sem alguma resposta


depois mais embaixo a caixa de texto com a resposta rápida nos tópicos


agora eu enviando uma mensagem ativando o ajax


o processo ocorre bem mas na hora de entregar o HTML... fica difícil heheh


após atualiza o tópico e testar a resposta rápida vejam o que aconteceu


falto a barra que separa as mensagem tanto emcima como embaixo,agora vou colocar o trecho do código inteiro que altera meu display.template.php
Quote<?xml version="1.0"?>
<?xml-stylesheet href="xslt/modification.xsl" type="text/xsl"?>
<!DOCTYPE modification SYSTEM "http://www.simplemachines.org/xml/modification">
<modification xmlns="http://www.simplemachines.org/xml/modification" xmlns:smf="http://www.simplemachines.org/">
   <id>AirRideTalk:ajax_quick_reply</id>
   <version>1.0.3</version>
   <file name="$sourcedir/Errors.php">
      <operation>
         <search position="after"><![CDATA[// Load the template and set the sub template.
   else
   {
      loadTemplate('Errors');
      $context['sub_template'] = 'fatal_error';
   }]]></search>
         <add><![CDATA[   // Load up xml error template
   else if (isset($_REQUEST['xml'])) {
      $context['sub_template'] = 'generic_xml';
      $context['xml_data'] = array(
         'errors' => array(
            'identifier' => 'error',
            'children' => array(
               array(
                  'value' => $context['error_message'],
               ),
            ),
         ),
      );
   }
]]></add>
      </operation>
   </file>
   <file name="$sourcedir/Display.php">
      <operation>
         <search position="after"><![CDATA[// Load the proper template and/or sub template.
   if (WIRELESS)
      $context['sub_template'] = WIRELESS_PROTOCOL . '_display';
   else]]></search>
         <add><![CDATA[   // If we are attempting to view a single post.. Lets make sure its safe to do so..
   // This was shameless (not really) stolen from Sleepy (with permission of course)
   if (isset($_REQUEST['msg']) && (is_array($_REQUEST['msg']) || !is_numeric($_REQUEST['msg']) ))
      unset($_REQUEST['msg']);
   elseif(isset($_REQUEST['msg'])) {
      $context['single-post'] = (int) $_REQUEST['msg'];
      $_REQUEST['start'] = 'msg' . $context['single-post'];
      if(isset($_REQUEST['xml']))
         $context['sub_template'] = 'ajax_reply';
   }

]]></add>
      </operation>
      <operation>
         <search position="after"><![CDATA[// Build a list of this board's moderators.
   $context['moderators'] = &$board_info['moderators'];
   $context['link_moderators'] = array();
   if (!empty($board_info['moderators']))]]></search>
         <add><![CDATA[   // Build the link tree for Single Post.. Only if its set...
   // Again, taken from Sleepy's mod.  Not really needed, but since the information is here, use it
   if(isset($context['single-post']))
      $context['linktree'][] = array(
         'url' => $scripturl . '?topic=' . $topic . ';msg='.$context['single-post'],
         'name' => $txt[72] . ' #' . $context['single-post'],
         'extra_before' => $settings['linktree_inline'] ? $txt[118] . ': ' : ''
      );

]]></add>
      </operation>
      <operation>
         <search position="after"><![CDATA[$attachments = array();

   // If there _are_ messages here... (probably an error otherwise :!)]]></search>
         <add><![CDATA[
   // Get the Junk ready.
   // Make sure that the list of messages gotten above contains the single post we're after (it always should, but just to double check)
   if(isset($context['single-post']) && in_array($context['single-post'], $messages))
      $messages = array ($context['single-post']);
]]></add>
      </operation>
      <operation>
         <search position="replace"><![CDATA['counter' => $counter,]]></search>
         <add><![CDATA[      'counter' => isset($_REQUEST['xml']) ? $context['num_replies'] : $counter,
]]></add>
      </operation>
      <operation error="ignore">
         <search position="replace"><![CDATA[if ((isset($context['pretty']['oldschoolquery']) || $context['pretty']['query_string']['board'] != $context['pretty']['board_urls'][$board]) && $modSettings['pretty_enable_filters'])
]]></search>
         <add><![CDATA[   if (!isset($_REQUEST['xml']) && (isset($context['pretty']['oldschoolquery']) || $context['pretty']['query_string']['board'] != $context['pretty']['board_urls'][$board]) && $modSettings['pretty_enable_filters'])
]]></add>
      </operation>
   </file>
   <file name="$sourcedir/Post.php">
      <operation>
         <search position="after"><![CDATA[if (!empty($_POST['announce_topic']))
      redirectexit('action=announce;sa=selectgroup;topic=' . $topic . (!empty($_POST['move']) && allowedTo('move_any') ? ';move' : '') . (empty($_REQUEST['goback']) ? '' : ';goback'));]]></search>
         <add><![CDATA[   // This took forever for me to figure out propelry, don't ask why.  late at night.
   // If this is an XML request (from AJAX Quick Reply), we'll need to return the
   // formatted post after its run through the display template.  This loads up the Display.php
   // Source file, then calls the function to get the post.
   if (isset($_REQUEST['xml'])) {
      require_once($sourcedir . '/Display.php');
      $_REQUEST['msg'] = $msgOptions['id'];

      call_user_func('Display');
   }
   // Really it caused problems because I forgot this else statement, so I kept getting redirected
   // and wrong data passed back to the Javascript functions.
   else {
]]></add>
      </operation>
      <operation>
         <search position="after"><![CDATA[}

// General function for topic announcements.]]></search>
         <add><![CDATA[   }
]]></add>
      </operation>
   </file>
   <file name="$boarddir/Themes/pnpn11final/Display.template.php">
      <operation>
         <search position="before"><![CDATA[//Ajax Quick Reply Niik
      // Show the member's signature?
      if (!empty($message['member']['signature']) && empty($options['show_no_signatures']))
         echo '
                     <hr width="100%" size="1" class="hrcolor" />
                     <div class="signature">', $message['member']['signature'], '</div>
                     ';

      echo '
                  </td>
                  
               </tr>
            </table>
         </td></tr>
      </table>]]></search>
         <add><![CDATA[';

      // Again, the location of this is very important and may be hard to find in a custom template.  The key is, as above in the
      // default template, look for the signature lines and it should go right after the second </table> below it
      if (isset($context['single-post']))
         echo '
<!-- End Single Post -->';

      echo '
]]></add>
      </operation>
      <operation>
         <search position="before"><![CDATA[quickReplyCollapsed = ', !empty($options['display_quick_reply']) && $options['display_quick_reply'] == 2 ? 'false' : 'true', ';]]></search>
         <add><![CDATA[   var view_newest_first = ', (empty($options['view_newest_first']) ? 0 : 1), '
]]></add>
      </operation>
      <operation>
         <search position="replace"><![CDATA[<input type="hidden" name="goback" value="', empty($options['return_to_post']) ? '0' : '1', '" />]]></search>
         <add><![CDATA[            <input type="hidden" name="goback" value="1" />]]></add>
      </operation>
      <operation>
         <search position="replace"><![CDATA[<input type="submit" name="post" value="' . $txt[105] . '" onclick="return submitThisOnce(this);" accesskey="s" tabindex="2" />
         <input type="submit" name="preview" value="' . $txt[507] . '" onclick="return submitThisOnce(this);" accesskey="p" tabindex="4" />';]]></search>
         <add><![CDATA[            ';
            // We will only do ajax quick reply if
            // 1) the current page is the last page of the topic or
            // 2) 'all' isset in REQUEST
            // otherwise we'll post the old fashioned way.
            if((empty($options['view_newest_first']) && $context['page_info']['current_page'] == $context['page_info']['num_pages']) || (!empty($options['view_newest_first']) && $context['page_info']['current_page'] == 1) || isset($_REQUEST['all']))
               echo '<input type="submit" name="post" value="' . $txt[105] . '" onclick="return ajax_reply(this);" accesskey="s" tabindex="2" />
            ';
            else
               echo '<input type="submit" name="post" value="' . $txt[105] . '" onclick="return submitThisOnce(this);" accesskey="s" tabindex="2" />
            ';
            echo '<input type="submit" name="preview" value="' . $txt[507] . '" onclick="return submitThisOnce(this);" accesskey="p" tabindex="4" />';
]]></add>
      </operation>
      <operation>
         <search position="after"><![CDATA[?>]]></search>
         <add><![CDATA[function template_ajax_reply() {
   global $context;

   // Load up the index template, since we need it for some theme settings and call the init function
   loadTemplate('index');
   template_init();

   // First we'll call the template function above to get the post
   template_main();

   // Then we'll take the contents of the buffer and throw it into a variable
   $buffer = ob_get_contents();

   // And now we'll clear the buffer out so we can put back in what we want
   ob_clean();

   // Now lets play with the buffer, first clearing out the stuff before the post we don't need
   $start_post = strpos($buffer, '<!-- Start Single Post -->') + 27; // Plus 27 because we don't want the HTML comment in the final buffer.
   $end_post = strpos($buffer, '<!-- End Single Post -->');
   $buffer = substr($buffer, $start_post, $end_post - $start_post);

   // Now change the windowbg value so the post displays with the right color (if its waiting approval then it won't change)
   $windowbg = (($_REQUEST['num_replies']+1) % 2 == 0) ? '"windowbg"' : '"windowbg2"';
   $buffer = str_replace(array('"windowbg"', '"windowbg2"'), $windowbg, $buffer);

   // Now we have just the post that we'll insert into the topic, lets add the XML stuff to it for AJAX.
   $buffer = '<' . '?xml version="1.0" encoding="'. $context['character_set']. '"?' . '>
<smf>
   <post><' . '![CDATA[' .
   $buffer .
   ']]' . '></post>
</smf>';

   // Now echo out the buffer
   echo $buffer;
}

]]></add>
      </operation>
   </file>
   <file name="$themedir/xml_topic.js">
      <operation>
         <search position="before"><![CDATA[function swapQuickReply()
{
   document.getElementById("quickReplyExpand").src = smf_images_url + "/" + (quickReplyCollapsed ? "collapse.gif" : "expand.gif");
   document.getElementById("quickReplyOptions").style.display = quickReplyCollapsed ? "" : "none";

   quickReplyCollapsed = !quickReplyCollapsed;
}
]]></search>
         <add><![CDATA[
function ajax_reply()
{
   var i, x = new Array();
   x[x.length] = 'topic=' + parseInt(document.forms.postmodify.elements['topic'].value);
   x[x.length] = 'goback=' + parseInt(document.forms.postmodify.elements['goback'].value);
   x[x.length] = 'subject=' + escape(textToEntities(document.forms.postmodify['subject'].value.replace(/&#/g, "&#38;#"))).replace(/\+/g, "%2B");
   x[x.length] = 'message=' + escape(textToEntities(document.forms.postmodify['message'].value.replace(/&#/g, "&#38;#"))).replace(/\+/g, "%2B");
   x[x.length] = 'icon=' + escape(textToEntities(document.forms.postmodify['icon'].value.replace(/&#/g, "&#38;#"))).replace(/\+/g, "%2B");
   x[x.length] = 'notify=' + escape(textToEntities(document.forms.postmodify['notify'].value.replace(/&#/g, "&#38;#"))).replace(/\+/g, "%2B");
   x[x.length] = 'num_replies=' + parseInt(document.forms.postmodify.elements['num_replies'].value);
   x[x.length] = 'sc=' + escape(textToEntities(document.forms.postmodify['sc'].value.replace(/&#/g, "&#38;#"))).replace(/\+/g, "%2B");

   // Send in the XMLhttp request and let's hope for the best.
   if (typeof window.ajax_indicator == "function")
      ajax_indicator(true);

   sendXMLDocument(smf_scripturl + "?action=post2;xml", x.join("&"), onPostDone);

   return false;
}

function onPostDone(XMLDoc)
{
   // We've finished the loading stuff.
   if (typeof window.ajax_indicator == "function")
      ajax_indicator(false);

   // Update the num_replies counter so if the user replies more than once without refreshing, we don't get an error.
   document.postmodify.num_replies.value = parseInt(document.postmodify.num_replies.value) + 1;

   var myTable = document.getElementById("postTable"), myRow, myCell, myData;

   var post = XMLDoc.getElementsByTagName('post')[0];
   var errors = XMLDoc.getElementsByTagName('errors')[0];

   // If there are errors, its better to just let SMF deal with them, so we'll submit the form and let its take its course
   if (errors) {
      document.postmodify.submit();
   }
   // Otherwise, the post was successful so lets add it in.
   else if (post) {
      myRow = myTable.insertRow((view_newest_first == 1) ? 0 : myTable.rows.length-1);
      myCell = myRow.insertCell(-1);
      myCell.style.padding = "1px 1px 0 1px";
      myData = post.childNodes[0].nodeValue;
      setInnerHTML(myCell, myData);

      // And empty the post reply box
      document.postmodify.message.value = "";
   }
   else {
      window.location.reload(true);
   }
}]]></add>
      </operation>
   </file>
   <file name="$themedir/Xml.template.php">
      <operation>
         <search position="replace"><![CDATA[if (!function_exists('template_button_strip'))
]]></search>
         <add><![CDATA[// Added another condition relating to AJAX Quick Reply
if ((!isset($_REQUEST['xml']) || (isset($_REQUEST['action']) && $_REQUEST['action'] != 'post2')) && !function_exists('template_button_strip'))
]]></add>
      </operation>
      <operation>
         <search position="after"><![CDATA[?>]]></search>
         <add><![CDATA[// This prints XML in it's most generic form.
function template_generic_xml()
{
   global $context, $settings, $options, $txt;

   echo '<', '?xml version="1.0" encoding="', $context['character_set'], '"?', '>';

   // Show the data.
   template_generic_xml_recursive($context['xml_data'], 'smf', '', -1);
}

// Recursive function for displaying generic XML data.
function template_generic_xml_recursive($xml_data, $parent_ident, $child_ident, $level)
{
   // This is simply for neat indentation.
   $level++;

   echo "\n" . str_repeat("\t", $level), '<', $parent_ident, '>';

   foreach ($xml_data as $key => $data)
   {
      // A group?
      if (is_array($data) && isset($data['identifier']))
         template_generic_xml_recursive($data['children'], $key, $data['identifier'], $level);
      // An item...
      elseif (is_array($data) && isset($data['value']))
      {
         echo "\n", str_repeat("\t", $level), '<', $child_ident;

         if (!empty($data['attributes']))
            foreach ($data['attributes'] as $k => $v)
               echo ' ' . $k . '="' . $v . '"';
         echo '>]]>&lt;<![CDATA[![CDATA[', $data['value'], ']]]]><![CDATA[></', $child_ident, '>';
      }

   }

   echo "\n", str_repeat("\t", $level), '</', $parent_ident, '>';
}

]]></add>
      </operation>
   </file>
</modification>

agora o arquivo display.template.php antes e depois de modificado!

espero que possam resolver este meu problema,mas eu ainda acho que é pouca coisa a ser modificada,penso que o erro seja mesmo na hora de entregar o HTML,deve ser alguma referecia no <div id="idDeEntregaDeResposta"></div>

Nícholas Carballo


TaijovuNeji

Amigo, tenha paciencia, todos aqui estão dispostos a ajudar sem ao menos ganhar nada em troca, e fazemos isso com prazer.
Se ninguém respondeu, é pq provavelmente não acharam uma solução para seu problema ainda...

Eu mesmo nao consegui entender muito bem qual é o seu problema, se tu instala isso, as respostas ficam aparecendo por cima de todas as mensagens anteriores, mas ae se voltar no tópico ela fica por último? Seria esse o problema?

E informe qual é a versão do seu SMF e tbm o nome do theme usado por vc
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

Nícholas Carballo

uso a versão 1.1.12 e o tema é PnPn,eu acho que descobri o problema só não sei pq segue dando erros,tipo existe no display.template.php 2 linhas que fica entre os posts

<!--Start Single Post--> e <!--End Single Post--> elas ficam entre as mensagens,um exemplo:

Quote
<!--Start Single Post-->
Visitante                          Assunto do tópico           
120 mensagens             mensagem
Email                               

                                         assinatura
<!--End Single Post-->
eu coloquei um echo no display.template.php para ver onde ficavam esses comentários e notei isso,fiz o mesmo no meu tema só que aparece tudo errado,vejam um exemplo:
Quote
<!--End Single Post-->
<!--Start Single Post-->
Visitante                          Assunto do tópico           
120 mensagens             mensagem
Email                               

                                         assinatura
<!--End Single Post-->
o End single post fica no ínicio também junto com o start,eu acho que é isso que está mostrando a mensagem no lugar de quem iniciou o tópico,acredito que com essa informação alguém possa me ajudar.

Spectrum..!!

Já verificou se os erros aparecem também no tema default (ou mesmo em outro tema) ?

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

Nícholas Carballo

Quote from: Spectrum..!!☻ on December 06, 2010, 06:45:46 AM
Já verificou se os erros aparecem também no tema default (ou mesmo em outro tema) ?
os erros não permanecem no tema default

TaijovuNeji

Algum mod que tu instalou que deve ter feito isso.
Mas se for problema somente da aparição desse código que vc disse, arranque ele, isso é comentário de código html...
Hospedagem 20GB, Cpanel, Windows ou Linux, com suporte a PHP ou ASP, R$ 30,00 por mes ou 290 por ano


meu site: http://www.dungeonmakers.com.br/forum
Não atendo PM para pedidos de suporte/ajuda. Para isso existe o forum!!!

Nícholas Carballo

vocês ainda não entenderam,viram que nas screens aparecem os comentários emcima e embaixo do post né?

mas o comentário que tem que ir no final também se repete emcima,consequetemente o mod joga o post com ajax emcima dele,ficando em primeiro lugar,mas ninguém quer me ajudar a solucionar o problema.

Spectrum..!!

Realmente, talvez não tenhamos entendido.
Eu penso porque o post em seu início é enorme em coisas e não me dá a luz o suficiente para compreender. Bem, fórum é assim mesmo, existem situações que até que se chegue a um entendimento vai muitas mensagens.

Não entendi, também, o porque de dizer que ninguém quer te ajudar.....até agora estamos, não?

Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

Nícholas Carballo

Sim estão,mas o número de visualizações nem condiz com o número de respostas e dias de tópico aberto,isso não é reclamação e sim apenas um comentário.

Vamos novamente a questão,tu viu que eu coloquei dois echo no display.template.php para ver onde eram exibidos os códigos não?
então só que tem algo de errado que ainda não entendi.
Quote
<!--Start Single Post-->
Visitante                          Assunto do tópico           
120 mensagens             mensagem
Email                               

                                         assinatura
<!--End Single Post-->
no tema default aparece dessa forma,os comentários emcima eu fiz aparecerem e estão bem próximos do código que faz aparecê-los mas com uma condição if.

agora em meu tema aparece dá seguinte forma
Quote<!--End Single Post-->
<!--Start Single Post-->
Visitante                          Assunto do tópico           
120 mensagens             mensagem
Email                               

                                         assinatura
<!--End Single Post-->

Espero que eu esteja sendo claro desta vez.

Spectrum..!!


Existem pessoas que deixam de buscar algo que dura a vida toda, para somente conquistar algo que dura alguns momentos...
Ser humilde; não é ser menos que alguém. É saber que não somos mais que ninguém!
SMF 2.0.4 | Meu site -->
Dell Vostro 3560 + AMD Radeon™ HD 7670M 1GB| Windows 8 Pro | Fedora 18 | IE10 | Google Chrome

Não atendo PM para pedidos de suporte/ajuda

Nícholas Carballo


Costa

Quote from: nicholascrb on December 07, 2010, 04:32:19 PM
Sim estão,mas o número de visualizações nem condiz com o número de respostas e dias de tópico aberto,isso não é reclamação e sim apenas um comentário.
Só um aparte, as visualizações não são apenas de pessoas e sim dos motores de busca. Portanto esse argumento não é lá muito fiável.

-Costa
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Nícholas Carballo

Oi costa tudo bem? os motores de busca que você fala são pessoas que usam ou robôs? se forem pessoas,minhas palavras seguem valendo.Senão me desculpe não sabia disto.E quanto a dúvida minha não consegui solucionar ela,vou abrir um novo tópico mas a dúvida é outra.Agradeço ao Spectrum..!!☻,TaijovuNeji e você Costa

Costa

Quote from: nicholascrb on December 09, 2010, 03:30:09 PM
Oi costa tudo bem? os motores de busca que você fala são pessoas que usam ou robôs? se forem pessoas,minhas palavras seguem valendo.Senão me desculpe não sabia disto.
Googlebot, Yahoo slurp, etc. Robôs.

-Costa
Hugo "Costa" Fernandes - PT SMF
Todas as MP's a pedir ajuda são sujeitas a radioactividade, microondas, queimadas e atiradas borda fora.

"At least someone appreciates the fact that I am doing and not thinking..."
"Laziness is counter-revolutionary."

Advertisement: