Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 General Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 07-24-2014, 02:10 AM
omardealo's Avatar
omardealo omardealo is offline
 
Join Date: Nov 2008
Location: egypt
Posts: 235
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Problem with str_replace function when removal apart of the template

Hello ,

i need to removal apart of the template SHOWTHREAD ,
i use str_replace function ,
every thing is okay and function working good ,
but my problem with "Escaping special characters and conditional execution of code"

this the code i want removal it from a template

PHP Code:
    <if condition="$show['threadrating']">
        <
td class="vbmenu_control" id="threadrating" nowrap="nowrap">
            <
a href="$show[nojs_link]#goto_threadrating"><span id="threadrating_current"><if condition="$show['rating']">$vbphrase[rating]: <img class="inlineimg" src="$stylevar[imgdir_rating]/rating_$thread[rating].gif" alt="<phrase 1="$thread[votenum]" 2="$thread[voteavg]">$vbphrase[thread_rating_x_votes_y_average]</phrase>" border="0" /><else />$vbphrase[rate_thread]</if></span></a>
            <if 
condition="$show['popups']"><script type="text/javascript"vbmenu_register("threadrating"); </script></if>
        </
td>
    </if> 
this is my plugin

PHP Code:
$code =
 
"<if condition=\"$show['threadrating']\">
        <td class=\"vbmenu_control\" id=\"threadrating\" nowrap=\"nowrap\">
            <a href=\"
$show[nojs_link]#goto_threadrating\"><span id=\"threadrating_current\"><if condition=\"$show['rating']\">$vbphrase[rating]: <img class=\"inlineimg\" src=\"$stylevar[imgdir_rating]/rating_$thread[rating].gif\" alt=\"<phrase 1=\"$thread[votenum]\" 2=\"$thread[voteavg]\">$vbphrase[thread_rating_x_votes_y_average]</phrase>\" border=\"0\" /><else />$vbphrase[rate_thread]</if></span></a>
            <if condition=\"
$show['popups']\"><script type=\"text/javascript\"> vbmenu_register(\"threadrating\"); </script></if>
        </td>
    </if>"
;

$vbulletin->templatecache['SHOWTHREAD'] = str_replace ($code,' ',$vbulletin->templatecache['SHOWTHREAD']); 
Reply With Quote
  #2  
Old 07-24-2014, 02:34 AM
vBNinja's Avatar
vBNinja vBNinja is offline
 
Join Date: May 2011
Location: USA
Posts: 239
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Why not just make a plugin in showthread_complete or something with:
PHP Code:
$show['threadrating'] = false
And maybe wrap it around an if statement so it only affects the threads/forums you need it removed in
Reply With Quote
  #3  
Old 07-24-2014, 12:16 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

If you still want to do the str_replace, I think you'd also need to escape the dollar sign ($) with a backslash. Or it might be easier to make it a single-quoted string and just escape the single quote characters.
Reply With Quote
  #4  
Old 07-24-2014, 12:55 PM
Dave Dave is offline
 
Join Date: May 2010
Posts: 2,583
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This is a nicer way:

PHP Code:
$code 
 
'<if condition="' $show['threadrating'] . '"> 
        <td class="vbmenu_control" id="threadrating" nowrap="nowrap"> 
            <a href="' 
$show[nojs_link] . '#goto_threadrating"><span id="threadrating_current"><if condition="' $show['rating'] . '">' $vbphrase[rating] . ': <img class="inlineimg" src="' $stylevar[imgdir_rating] . '/rating_' $thread[rating].gif '" alt="<phrase 1="' $thread[votenum] . '" 2="' $thread[voteavg] . '">' $vbphrase[thread_rating_x_votes_y_average] . '</phrase>" border="0" /><else />' $vbphrase[rate_thread] . '</if></span></a> 
            <if condition="' 
$show['popups'] . '"><script type="text/javascript"> vbmenu_register("threadrating"); </script></if> 
        </td> 
    </if>'


$vbulletin->templatecache['SHOWTHREAD'] = str_replace ($code,' ',$vbulletin->templatecache['SHOWTHREAD']); 
Put the code within single quotes, escape the variables and no need to add slashes in front of quotes.
Also much easier to read.
Reply With Quote
  #5  
Old 07-24-2014, 01:01 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Dave View Post
This is a nicer way:

PHP Code:
$code 
 
'<if condition="' $show['threadrating'] . '"> 
        <td class="vbmenu_control" id="threadrating" nowrap="nowrap"> 
            <a href="' 
$show[nojs_link] . '#goto_threadrating"><span id="threadrating_current"><if condition="' $show['rating'] . '">' $vbphrase[rating] . ': <img class="inlineimg" src="' $stylevar[imgdir_rating] . '/rating_' $thread[rating].gif '" alt="<phrase 1="' $thread[votenum] . '" 2="' $thread[voteavg] . '">' $vbphrase[thread_rating_x_votes_y_average] . '</phrase>" border="0" /><else />' $vbphrase[rate_thread] . '</if></span></a> 
            <if condition="' 
$show['popups'] . '"><script type="text/javascript"> vbmenu_register("threadrating"); </script></if> 
        </td> 
    </if>'


$vbulletin->templatecache['SHOWTHREAD'] = str_replace ($code,' ',$vbulletin->templatecache['SHOWTHREAD']); 
Put the code within single quotes, escape the variables and no need to add slashes in front of quotes.
Also much easier to read.

But that won't work the same. You want to avoid having the variables evaluated because you're trying to match the string that's in the template cache.
Reply With Quote
  #6  
Old 07-24-2014, 01:25 PM
Dave Dave is offline
 
Join Date: May 2010
Posts: 2,583
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
But that won't work the same. You want to avoid having the variables evaluated because you're trying to match the string that's in the template cache.
Oh in that case I misunderstood OP.
Reply With Quote
  #7  
Old 07-25-2014, 06:42 AM
omardealo's Avatar
omardealo omardealo is offline
 
Join Date: Nov 2008
Location: egypt
Posts: 235
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by vBNinja View Post
Why not just make a plugin in showthread_complete or something with:
PHP Code:
$show['threadrating'] = false
And maybe wrap it around an if statement so it only affects the threads/forums you need it removed in
becouse i still want threadrating is runing , i try to removal this code and put it under the first post , Thnx

Quote:
Originally Posted by kh99 View Post
If you still want to do the str_replace, I think you'd also need to escape the dollar sign ($) with a backslash. Or it might be easier to make it a single-quoted string and just escape the single quote characters.
okay brother , i try both but not working .


{escape the dollar sign ($) + escape double quote } : not working

PHP Code:
$code 
 
"<if condition=\"\$show['threadrating']\"> 
        <td class=\"vbmenu_control\" id=\"threadrating\" nowrap=\"nowrap\"> 
            <a href=\"\$show[nojs_link]#goto_threadrating\"><span id=\"threadrating_current\"><if condition=\"\$show['rating']\">\$vbphrase[rating]: <img class=\"inlineimg\" src=\"\$stylevar[imgdir_rating]/rating_\$thread[rating].gif\" alt=\"<phrase 1=\"\$thread[votenum]\" 2=\"\$thread[voteavg]\">\$vbphrase[thread_rating_x_votes_y_average]</phrase>\" border=\"0\" /><else />\$vbphrase[rate_thread]</if></span></a> 
            <if condition=\"\$show['popups']\"><script type=\"text/javascript\"> vbmenu_register(\"threadrating\"); </script></if>
        </td> 
    </if>"



escape only single quote i try it already : not working

PHP Code:
$code =
'<if condition="$show[\'threadrating\']"> 
        <td class="vbmenu_control" id="threadrating" nowrap="nowrap"> 
            <a href="$show[nojs_link]#goto_threadrating"><span id="threadrating_current"><if condition="$show[\'rating\']">$vbphrase[rating]: <img class="inlineimg" src="$stylevar[imgdir_rating]/rating_$thread[rating].gif" alt="<phrase 1="$thread[votenum]" 2="$thread[voteavg]">$vbphrase[thread_rating_x_votes_y_average]</phrase>" border="0" /><else />$vbphrase[rate_thread]</if></span></a> 
            <if condition="$show[\'popups\']"><script type="text/javascript"> vbmenu_register("threadrating"); </script></if>
        </td> 
    </if>'

--------------- Added [DATE]1406277258[/DATE] at [TIME]1406277258[/TIME] ---------------

But this working
single-quoted string and escape the double quote characters

like that :

PHP Code:
$code '<td class=\"vbmenu_control\" id=\"threadrating\" nowrap=\"nowrap\">';  
$vbulletin->templatecache['SHOWTHREAD'] = str_replace ($code,' ',$vbulletin->templatecache['SHOWTHREAD']); 

replace <td> Is this enough ? it removed the popup of Thread Rating as well , and i think a problem in Escaping conditional , and this line

PHP Code:
<script type="text/javascript"vbmenu_register("threadrating"); </script
Attached Images
File Type: jpg 7-25-2014 11-18-49 AM.jpg (43.4 KB, 0 views)
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 01:33 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07879 seconds
  • Memory Usage 2,298KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (10)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (1)postbit_attachment
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • postbit_attachment
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete