Obewanz Posted June 16, 2003 Posted June 16, 2003 Well, I finally get to contribute something - even if it is small. :lol: I actually got sidetracked on this while working on changing the reviewer name to display only the first name, last initial instead of the whole name. Anyway, this will convert your copyright date at the footer of your site to Roman Numerals... In /catalog/includes/languages/english.php (and any other language files you want the change to appear in.); CHANGE LINE: define('FOOTER_TEXT_BODY', 'Copyright © 2003 <a href="http://www.oscommerce.com" target="_blank">osCommerce</a><br>Powered by <a href="http://www.oscommerce.com" target="_blank">osCommerce</a>'); TO: define('FOOTER_TEXT_BODY', 'Copyright © %s <a href="http://www.oscommerce.com" target="_blank">osCommerce</a><br>Powered by <a href="http://www.oscommerce.com" target="_blank">osCommerce</a>'); Paste the following code near or at the bottom of your /catalog/includes/functions/general.php file; //// // Decimal <--> Roman 1.2 (osCommerce) /************************************************ Written by: Rasmus Rimestad Written: XXIV.VII.MMI Modified for osCommerce by: Steve Myers Modified: XIV.VI.MMIII This file includes three functions string dec2roman (integer $number) where $number is a number you want to convert to a roman one. integer roman2dec (string $linje) where $linje is the roman number you want to conver to an integer. function roman_array_search($searchString, $array) where $array is the roman numeral being evaluated - only used internally. ************************************************/ function dec2roman($number) { # Making input compatible with script. $number = floor($number); if($number < 0) { $linje = "-"; $number = abs($number); } # Defining arrays $romanNumbers = array(1000, 500, 100, 50, 10, 5, 1); $romanLettersToNumbers = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1); $romanLetters = array_keys($romanLettersToNumbers); # Looping through and adding letters. while ($number) { for($pos = 0; $pos <= 6; $pos++) { # Dividing the remaining number with one of the roman numbers. $dividend = $number / $romanNumbers[$pos]; # If that division is >= 1, round down, and add that number of letters to the string. if($dividend >= 1) { $linje .= str_repeat($romanLetters[$pos], floor($dividend)); # Reduce the number to reflect what is left to make roman of. $number -= floor($dividend) * $romanNumbers[$pos]; } } } # If I find 4 instances of the same letter, this should be done in a different way. # Then, subtract instead of adding (smaller number in front of larger). $numberOfChanges = 1; while($numberOfChanges) { $numberOfChanges = 0; for($start = 0; $start < strlen($linje); $start++) { $chunk = substr($linje, $start, 1); if($chunk == $oldChunk && $chunk != "M") { $appearance++; } else { $oldChunk = $chunk; $appearance = 1; } # Was there found 4 instances. if($appearance == 4) { $firstLetter = substr($linje, $start - 4, 1); $letter = $chunk; $sum = $firstNumber + $letterNumber * 4; $pos = roman_array_search($letter, $romanLetters); # Are the four digits to be calculated together with the one before? (Example yes: VIIII = IX Example no: MIIII = MIV # This is found by checking if the digit before the first of the four instances is the one which is before the digits in the order # of the roman number. I.e. MDCLXVI. if($romanLetters[$pos - 1] == $firstLetter) { $oldString = $firstLetter . str_repeat($letter, 4); $newString = $letter . $romanLetters[$pos - 2]; } else { $oldString = str_repeat($letter, 4); $newString = $letter . $romanLetters[$pos - 1]; } $numberOfChanges++; $linje = str_replace($oldString, $newString, $linje); } } } return $linje; } function roman2dec($linje) { # Fixing variable so it follows my convention $linje = strtoupper($linje); # Removing all not-roman letters $linje = ereg_replace("[^IVXLCDM]", "", $linje); print("$linje = $linje<br>"); # Defining variables $romanLettersToNumbers = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1); $oldChunk = 1001; # Looping through line for($start = 0; $start < strlen($linje); $start++) { $chunk = substr($linje, $start, 1); $chunk = $romanLettersToNumbers[$chunk]; if($chunk <= $oldChunk) { $calculation .= " + $chunk"; } else { $calculation .= " + " . ($chunk - (2 * $oldChunk)); } $oldChunk = $chunk; } # Summing it up eval("$calculation = $calculation;"); return $calculation; } # Implementation of the roman_array_search function. Works only with numerical arrays. function roman_array_search($searchString, $array) { foreach ($array as $content) { if($content == $searchString) { return $pos; } $pos++; } } And finally in /catalog/includes/languages/footer.php; CHANGE LINE: echo FOOTER_TEXT_BODY TO: echo sprintf(FOOTER_TEXT_BODY, dec2roman(date('Y'))); Personally, I think it adds a "touch of class" to a website since most everybody displays the copyright date the same way. Enjoy!! 8) Obewanz The GraphicZoo check profile for web address
Guest Posted June 17, 2003 Posted June 17, 2003 :D Great Tip. :D I put the code in and it worked right off. I like being different anyway. 8)
Guest Posted June 23, 2003 Posted June 23, 2003 I actually got sidetracked on this while working on changing the reviewer name to display only the first name, last initial instead of the whole name. Where can I find this?
Obewanz Posted February 29, 2008 Author Posted February 29, 2008 Well, it seems it only took me 5 years to actually make this a contribution! (w00t) But hopefully somebody will find it useful... It's been upgraded to work with MS2.2 and can be found here: http://addons.oscommerce.com/info/5764 The GraphicZoo check profile for web address
Obewanz Posted February 29, 2008 Author Posted February 29, 2008 You can also find the support topic here: Roman Numerals The GraphicZoo check profile for web address
Recommended Posts
Archived
This topic is now archived and is closed to further replies.