Проблема с верхним регистром УРЛов. MODx
13 сообщений
#12 лет назад
День добрый, форумчане!При реализации переноса сайта на MODx EVO столкнулся со следующей проблемой:
На старом сайте большинство URL имеют вид site.net/FixWest.html (заглавные буквы в адресе), но при простановке псевдонима в CMSку исправляет заглавные символы на строчные.
Что не есть хорошо, необходимо точное соответствие урлов. Если двигаюсь в правильном направлении, система заменяет псевдонимы в файле - assets/plugins/transalias/transalias.class.php
Так как знаний в php не достаточно, прошу помочь разобраться с ситуацией.
Содержимое файла прилагаю. Заранее благодарю.
<?php
/**
* @name TransAlias
* @desc Handle the task of loading transliteration tables and applying them
* to a string for the purpose of creating a friendly URL alias.
* @package modx
* @subpackage modx.plugins.transalias
* @author Olivier B. Deland
* @license GNU General Public License
*/
class TransAlias {
/**
* name of the file to use for transliteration (without .php)
* also used as array key
*
* @var string
* @access private
*/
var $_useTable;
/**
* hold conversion tables
*
* @var array
* @access
*/
var $_tables = array ('named' => array (
'quot' => '"','amp' => '&','lt' => '<','gt' => '>','OElig' => 'Œ','oelig' => 'œ','Scaron' => 'Š','scaron' => 'š',
'Yuml' => 'Ÿ','circ' => 'ˆ','tilde' => '˜','ensp' => ' ','emsp' => ' ','thinsp' => ' ','zwnj' => '','zwj' => '',
'lrm' => '','rlm' => '','ndash' => '–','mdash' => '—','lsquo' => '‘','rsquo' => '’','sbquo' => '‚','ldquo' => '“',
'rdquo' => '”','bdquo' => '„','dagger' => '†','Dagger' => '‡','permil' => '‰','lsaquo' => '‹','rsaquo' => '›','euro' => '€',
'fnof' => 'ƒ','Alpha' => 'Α','Beta' => 'Β','Gamma' => 'Γ','Delta' => 'Δ','Epsilon' => 'Ε','Zeta' => 'Ζ','Eta' => 'Η',
'Theta' => 'Θ','Iota' => 'Ι','Kappa' => 'Κ','Lambda' => 'Λ','Mu' => 'Μ','Nu' => 'Ν','Xi' => 'Ξ','Omicron' => 'Ο',
'Pi' => 'Π','Rho' => 'Ρ','Sigma' => 'Σ','Tau' => 'Τ','Upsilon' => 'Υ','Phi' => 'Φ','Chi' => 'Χ','Psi' => 'Ψ',
'Omega' => 'Ω','alpha' => 'α','beta' => 'β','gamma' => 'γ','delta' => 'δ','epsilon' => 'ε','zeta' => 'ζ','eta' => 'η',
'theta' => 'θ','iota' => 'ι','kappa' => 'κ','lambda' => 'λ','mu' => 'μ','nu' => 'ν','xi' => 'ξ','omicron' => 'ο',
'pi' => 'π','rho' => 'ρ','sigmaf' => 'ς','sigma' => 'σ','tau' => 'τ','upsilon' => 'υ','phi' => 'φ','chi' => 'χ',
'psi' => 'ψ','omega' => 'ω','thetasym' => 'ϑ','upsih' => 'ϒ','piv' => 'ϖ','bull' => '•','hellip' => '…','prime' => '′',
'Prime' => '″','oline' => '‾','frasl' => '⁄','weierp' => '℘','image' => 'ℑ','real' => 'ℜ','trade' => '™','alefsym' => 'ℵ',
'larr' => '←','uarr' => '↑','rarr' => '→','darr' => '↓','harr' => '↔','crarr' => '↵','lArr' => '⇐','uArr' => '⇑',
'rArr' => '⇒','dArr' => '⇓','hArr' => '⇔','forall' => '∀','part' => '∂','exist' => '∃','empty' => '∅','nabla' => '∇',
'isin' => '∈','notin' => '∉','ni' => '∋','prod' => '∏','sum' => '∑','minus' => '−','lowast' => '∗','radic' => '√',
'prop' => '∝','infin' => '∞','ang' => '∠','and' => '∧','or' => '∨','cap' => '∩','cup' => '∪','int' => '∫',
'there4' => '∴','sim' => '∼','cong' => '≅','asymp' => '≈','ne' => '≠','equiv' => '≡','le' => '≤','ge' => '≥',
'sub' => '⊂','sup' => '⊃','nsub' => '⊄','sube' => '⊆','supe' => '⊇','oplus' => '⊕','otimes' => '⊗','perp' => '⊥',
'sdot' => '⋅','lceil' => '⌈','rceil' => '⌉','lfloor' => '⌊','rfloor' => '⌋','lang' => '〈','rang' => '〉','loz' => '◊',
'spades' => '♠','clubs' => '♣','hearts' => '♥','diams' => '♦','nbsp' => ' ','iexcl' => '¡','cent' => '¢','pound' => '£',
'curren' => '¤','yen' => '¥','brvbar' => '¦','sect' => '§','uml' => '¨','copy' => '©','ordf' => 'ª','laquo' => '«',
'not' => '¬','shy' => '','reg' => '®','macr' => '¯','deg' => '°','plusmn' => '±','sup2' => '²','sup3' => '³',
'acute' => '´','micro' => 'µ','para' => '¶','middot' => '·','cedil' => '¸','sup1' => '¹','ordm' => 'º','raquo' => '»',
'frac14' => '¼','frac12' => '½','frac34' => '¾','iquest' => '¿','Agrave' => 'À','Aacute' => 'Á','Acirc' => 'Â','Atilde' => 'Ã',
'Auml' => 'Ä','Aring' => 'Å','AElig' => 'Æ','Ccedil' => 'Ç','Egrave' => 'È','Eacute' => 'É','Ecirc' => 'Ê','Euml' => 'Ë',
'Igrave' => 'Ì','Iacute' => 'Í','Icirc' => 'Î','Iuml' => 'Ï','ETH' => 'Ð','Ntilde' => 'Ñ','Ograve' => 'Ò','Oacute' => 'Ó',
'Ocirc' => 'Ô','Otilde' => 'Õ','Ouml' => 'Ö','times' => '×','Oslash' => 'Ø','Ugrave' => 'Ù','Uacute' => 'Ú','Ucirc' => 'Û',
'Uuml' => 'Ü','Yacute' => 'Ý','THORN' => 'Þ','szlig' => 'ß','agrave' => 'à','aacute' => 'á','acirc' => 'â','atilde' => 'ã',
'auml' => 'ä','aring' => 'å','aelig' => 'æ','ccedil' => 'ç','egrave' => 'è','eacute' => 'é','ecirc' => 'ê','euml' => 'ë',
'igrave' => 'ì','iacute' => 'í','icirc' => 'î','iuml' => 'ï','eth' => 'ð','ntilde' => 'ñ','ograve' => 'ò','oacute' => 'ó',
'ocirc' => 'ô','otilde' => 'õ','ouml' => 'ö','divide' => '÷','oslash' => 'ø','ugrave' => 'ù','uacute' => 'ú','ucirc' => 'û',
'uuml' => 'ü','yacute' => 'ý','thorn' => 'þ','yuml' => 'ÿ'
));
/**
* Swap named HTML entities with numeric entities.
*
* @see *deadlink*ссылка
*/
function convert_entity($matches, $destroy= true) {
if (isset($this->$_tables]))
return $this->$_tables];
else
return $destroy ? '' : $matches;
}
/**
* return the value of a POSTed TV
* TV may be used to override the default or hard-configured transliteration table
*
* @param string $tv name of Template Variable
* @return value of TV in current POST operation or false if TV not found in POST
*/
function getTVValue($tv) {
$modx =& $GLOBALS;
$additionalEncodings = array('-' => '%2D', '.' => '%2E', '_' => '%5F');
$tvname = str_replace(array_keys($additionalEncodings), array_values($additionalEncodings), rawurlencode($tv));
if(array_key_exists('tv'.$tvname, $_POST)) {
include_once $GLOBALS->config . 'manager/includes/tmplvars.commands.inc.php';
$val = $_POST;
$id = $_POST;
if($val == '@INHERIT' && empty($_POST) && !empty($_POST)) {
// we have to look at parent directly
$id = $_POST;
$parent = $modx->getPageInfo($_POST, 0, 'id,parent,published');
$ptv = $modx->getTemplateVar($tv, '*', $parent, $parent);
$val = $ptv;
}
$return = ProcessTVCommand($val, $tv, $id);
return $return;
} else {
return false;
}
}
/**
* load a transliteration table from a file and use it
*
* @param string $name
* @return bool success
*/
function loadTable($name, $remove_periods = 'No') {
if (empty($name) || !is_string($name)) {
return false;
}
if (isset ($this->_tables )) {
$this->_useTable = $name;
return true;
} else {
$filePath = dirname(__FILE__).'/transliterations/'.$name.'.php';
if (is_file($filePath)) {
$table = include $filePath;
if ($remove_periods == 'Yes') {
$table = '';
}
$this->_tables = $table;
if (is_array($this->_tables) && !empty($this->_tables)) {
$this->_useTable = $name;
return true;
} else {
return false;
}
} else {
return false;
}
}
return false;
}
/**
* perform transliteration and clean up alias
*
* @param string $alias
* @return string alias
*/
function stripAlias($alias,$char_restrict,$word_separator) {
// Convert all named HTML entities to numeric entities
$alias = preg_replace_callback('/&({1,7});/', array($this,'convert_entity'), $alias);
// Convert all numeric entities to their actual character
$alias = preg_replace('/({1,7});/ei', 'chr(hexdec("\\1"))', $alias);
$alias = preg_replace('/({1,7});/e', 'chr("\\1")', $alias);
if (!empty($this->_useTable)) {
$alias = strtr($alias, $this->_tables);
}
$alias = strip_tags($alias); // strip HTML
if($char_restrict=='lowercase alphanumeric') {
$alias = preg_replace('//', '', $alias); // strip non-alphanumeric characters
$alias = strtolower($alias); // make lowercase
} elseif($char_restrict=='alphanumeric') {
$alias = preg_replace('//', '', $alias); // strip non-alphanumeric characters
} else { // restrict only to legal characters
$alias = preg_replace('/\{\}\|\^\'\\\\]/', '', $alias); // remove chars that are illegal/unsafe in a url
}
switch($word_separator) {
case 'dash': $word_separator='-'; break;
case 'underscore': $word_separator='_'; break;
case 'none': $word_separator=''; break;
// default: use the value of $word_separator
}
$alias = preg_replace('/\s+/', $word_separator, $alias); // convert white-space to word separator
$alias = preg_replace('/'.$word_separator.'+/', $word_separator, $alias); // convert multiple word separators to one
if(strlen($word_separator)==1)
$alias = trim($alias, $word_separator.'/. '); // trim excess and bad chars
else
$alias = trim($alias, '/. '); // trim bad chars
return $alias;
}
}
?>
935 сообщений
#12 лет назад
Для кода вообще-то есть кнопочка "код".И пример:
какой-то код
А почему замена строчными это Цитата ("hennedy"):
не есть хорошо?
И зачем Цитата ("hennedy"):
необходимо точное соответствие урлов?
3195 сообщений
#12 лет назад
Вот это: $alias = strtolower($alias); // make lowercase
замените на вот это:
// $alias = strtolower($alias); // make lowercase
13 сообщений
#12 лет назад
Цитата ("radar0080"):Для кода вообще-то есть кнопочка "код".Спасибо, буду знать )
Цитата ("radar0080"):
И зачем- на сайте 3500 страниц, сплошь усеянных ссылками, - это раз, и второе - для СЕО.
935 сообщений
#12 лет назад
Я всё равно не пойму, зачем? Ведь обе ссылки (и с заглавными и со строчными) будут в итоге рабочими. Ссылки же регистронезависимы.
13 сообщений
3195 сообщений
#12 лет назад
Цитата ("hennedy"):Результат тот же.. (
Значит вы привели неверный код (неверный файл), т.к. других инструкций по приведению текста в нижний регистр в нём нет.
935 сообщений
#12 лет назад
hennedy, возможно, ещё эта замена происходит в .htaccess файле, там смотрели?
13 сообщений
#12 лет назад
Я указал файл, который, как мне кажется, должен отвечать за регистр псевдонимов (нашел на одном из форумов). Может не в той стороне искал?!Но все равно спасибо!
13 сообщений
#12 лет назад
Цитата ("radar0080"):возможно, ещё эта замена происходит в .htaccess файле, там смотрели?
Точно нет! .htaccess с минимальными настройками.