The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
Forcing Capitalization with PHP
I am using this simple php code to force thread titles to capitalize the first letter of each word:
Code:
$smallwords = array( 'a','of','the'); $words = explode(' ', $vbulletin->GPC['subject']); foreach ($words as $key => $word) { if (!$key or !in_array($word, $smallwords)) $words[$key] = ucwords($word); } $vbulletin->GPC['subject'] = implode(' ' , $words); |
Благодарность от: | ||
RedTurtle |
#2
|
|||
|
|||
Maybe something like this:
Code:
$smallwords = array( 'a','of','the'); $capwords = array('ALLCAPS', 'ABC', XYZ'); $words = explode(' ', $vbulletin->GPC['subject']); foreach ($words as $key => $word) { $capword = strtoupper($word); if (in_array($capword, $capwords)) $words[$key] = $capword; else if (!$key or !in_array($word, $smallwords)) $words[$key] = ucwords($word); } $vbulletin->GPC['subject'] = implode(' ' , $words); |
#3
|
|||
|
|||
LEGENDARY! Just one small issue. If someone types a title in all caps, because we disabled shouting... nothing applies, it doesn't cap the first letter of each word and doesn't do all caps on the right words, any idea? Thanks!
|
#4
|
|||
|
|||
Which hook are you using for your code (assuming it's in a plugin)?
|
#5
|
|||
|
|||
newthread_post_start
|
#6
|
|||
|
|||
That happens because the no shouting function is called in the data manager, which is after your code runs. I think you could solve that by using a hook in the data manager (and you'd need to change your code accordingly), but it's too late at night for me to work it out.
ETA: well, there is one thing you can do that doesn't take a lot of working out - you could edit the file includes/class_dm_threadpost.php and put your code at the end of the function verify_title() (around line 107), and change your code to use $title in place of $vbulletin->GPC['subject']. But you probably don't want to edit files because it causes a problem when you upgrade. |
#7
|
|||
|
|||
Hi what if I disabled the built-in shouting feature, then put additional code in the plugin to disable all caps? I could put it right before the other code in the plugin, would that work?
|
#8
|
|||
|
|||
You could do that. But I think I figured out another way: use hook data_start and this code:
Code:
if (is_subclass_of($this, 'vB_DataManager_ThreadPost') && is_array($this->validfields['title'])) { global $smallwords, $capwords; $smallwords = array( 'a','of','the'); $capwords = array('ALLCAPS', 'ABC', 'XYZ'); $this->validfields['title'][VF_CODE] = ' global $smallwords, $capwords; $retval = $dm->verify_title($data); $words = explode(" ", $data); foreach ($words as $key => $word) { $capword = strtoupper($word); if (in_array($capword, $capwords)) { $words[$key] = $capword; } else if (!$key or !in_array($word, $smallwords)) $words[$key] = ucwords($word); } $data = implode(" " , $words); return $retval; '; } |
#9
|
||||
|
||||
Quote:
I have one question kh99 -- I have a lot of words that I would like to be left capitalized (lots of acronyms that are used on the forum). Is there a way I can have an external file in which I can enter the acronyms and have this plugin call that file rather than me having to add them all into the plugin code? Thank you! EDIT #1: Currently this code doesn't seem to work for 2 words that need to be capitalized in the same thread. It will leave the first one capitalized but then make the second one lowercase on all letters except for the first one. So if I need ABC and XYZ both left capitalized the thread will make ABC and Xyz. EDIT #2: Alternatively is there a way that it just leaves any all capitalized word which is less than X number of characters alone? EDIT #3: In regards to my EDIT #1, it seems that it wasn't working because there was a question mark at the end of the capitalized word. Any way to have a question mark or exclamation mark at the end of a ALL CAPS word not make the all caps word become lowercase? |
#10
|
|||
|
|||
Oh, yeah, not taking punctuation into consideration was an oversight on my part. I can fix it but it might take a while until I get to it. (Or maybe someone else will post a fix first).
|
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|