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

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 02-10-2008, 01:41 PM
Tefra's Avatar
Tefra Tefra is offline
 
Join Date: Mar 2005
Posts: 68
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Autolink strings in custom mod

I have created a custom terminology/glossary mod for vb, and i have also included a simple function to auto link to other terms. but i have two major issues. It breaks html tags.

Any help is appreciated, the preg_replace in line 15 is the vbulletin method to highlight strings, if that helps...

PHP Code:
function terms_build_relation($message$intermid 0)
{
    global 
$db;

    
$words         = array();
    
$keywords     $db->escape_string(strip_tags($message));
    
$sql         $db->query_read("SELECT term_id, term_title FROM ".VBSED_PREFIX."terms WHERE MATCH(term_title) AGAINST('$keywords') ".iif($intermid"AND term_id <> $intermid"'')." AND term_active = 1");
                    
    while(
$sim $db->fetch_array($sql)) {    $words[$sim['term_id']] = $sim['term_title']; }
    
    
$message str_replace('\"''"'$message);
    foreach (
$words AS $key => $rep)
    {
        if(
in_array(strtolower($rep), array('http''https''ftp'))) continue; //Not Good Enough
        
$message preg_replace('#(?<=[\s"\]>()]|^)(' $rep ')(([.,:;-?!()\s"<\[]|$))#siU''[term='.$key.']\\1[/term]\\2'$message1);
    }
    
$message ereg_replace('\\[term=([0-9]+)\\]([^\\[]*)\\[/term\\]''<em><a href="'.VBSED_TERMS_URL.'item=\\1">\\2</a></em>'$message);
    
$message ereg_replace('\\[term=([0-9]+)\\]([^\\[]*)\\[/term\\]''\\2'$message); // BUG Step 1!!! Remove any open term bbcode
    
return $message;    

The second issue is that sometimes it breaks into other autolinked terms, that's why in the end i replace any open term bbcode.

For example, there are the terms "system" and "system registry". In a 3rd term definition there is the string "system registry". In the first pass it replaces the "system" term but in the second pass it tries to replace the whole string "system registry" Here comes in hand the removal of the empty term bbcode. This isn't a great issue as the first one as i believe if the first issue is fixed this will also be gone.

You can check it out here
Here is an example breaking img tag with the tag parameter.
Reply With Quote
 


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 03:52 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.04853 seconds
  • Memory Usage 2,382KB
  • 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
  • (3)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (4)post_thanks_box
  • (4)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (4)post_thanks_postbit_info
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)postbit_wrapper
  • (1)showthread_list
  • (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_threadedmode.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • 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_threaded
  • showthread_threaded_construct_link
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete