- HTML и CSS
- CSS3 shape-outside или обтекание картинки текстом
- Маштабируемый фон background css
- CSS выравнивание по вертикали
- Хранение картинок в css с помощью base64
- Как сделать ссылку, якорь?
- CSS3 для Internet Explirer 6 и старше
- Вёрстка для мобильных устройств
- Растягиваем html на всю страницу
- Таблица цветов CSS
- Выравнивание тега LI в контенте
- Оооох какой прекрасный box-sizing
- Делаем таблицу при помощи div и css
- Как сделать кросбраузерный linear-gradient без особых усилий
- CSS прозрачность для всех
- CSS для печати @media print
- Выравнивание блоков с помощью css {display: inline-block}
- Замечательное значение inherit
- Тень блочных элементов в CSS3
- Обводка текста с помощью CSS
- Полезные html символы
- Хаки или CSS для Internet Explorer-ов
- Делаем трёхуровневое меню на css
- jQuery, javaScript
- Устанавливаем на Яндекс Карте свою картинку вместо стандартной метки
- Адаптивные фотогалереи, слайдеры, карусели для сайта
- Узнаём координаты для установки скрипта Яндекс Карт
- Собственный фильтр для селекторов. Выбираем случайный элемент на jQuery
- closeClick true fancyBox 2, closeClick :true
- jquery ui slider, дробные числа, float values
- Парсер параметров из адресной строки jQuery
- Подсказки по javascript
- Выпадающее горизонтальное меню
- Работа с объектами в JavaScript: теория и практика
- Работа с массивами в jquery
- PHP
- Регулярные выражения онлайн
- Как определить путь к файлу текущего класса
- PHP скрипт для поиска. Удаление вируса с сайта
- UMI-CMS
- UMI CMS rel canonical
- UMI CMS API Шаблоны данных Вывести текст из подсказки
- UMI CMS API Шаблоны данных Добавить префикс к полю
- Если надо в UMI CMS открыть доступ к файлу в корне сайта htaccess
- Как перенести контент со старой UMI на новую UMI CMS с помощью umiDump
- Отправка письма с вложением UMI CMS API
- Как вывести из набор изображений одну картинку UMI CMS API (или случайную)
- UMI CMS Основные поля для отправки формы в модуле Конструктор форм
- Функции API UMI CMS для добавления, редактирования, удаления объектов каталога
- Функции API UMI CMS для добавления, редактирования, удаления объектов каталога
- UMI CMS Фильтрация спама на сайте
- Работа с набором изображений (multiple_image) TPL в UMI.CMS
- UMI CMS Ошибка "I expect value in request for param"
- UMI.CMS USEL кириллица не работает
- UMI Добавление дополнительных настроик на примере модуля catalog
- Подключение шаблонов в UMI.CMS в TPL шаблонизаторе
- UMI.CMS - забыл пароль администратора. Как восстановить?
- UMI Selector USEL фильтрация в PHP
- Передать в xslt xpath в запросе знак амперсанда
- Работа с system makeThumbnail
- Вывести названия методов в UMI
- UMI CMS API загрузка модуля
- UMI CMS карта сайта с помощью Usel
- UMI выгрузка из 1C поиск страницы копии, удаление копии
- Как в UMI.CMS изменить адрес домена в sitemap.xml и robots.txt. Изменить HTTP на HTTPS
- Вывод баннеров/слайдера в umi xslt
- UMI.CMS нет вкладок в админке
- XSLT вывод ссылки в которой присутствует знак амперсанда &
- UMI CMS Выгрузка из 1С нужно чтобы название товара (страницы каталога) не менялось
- Как в UMI поставить всем страницам галку на просмотр гостю
- Как узнать у страницы id шаблона данных через api?
- UMI.CMS работа с debug config.ini фильтрация по IP
- Как задать заголовок H1 (header) на странице созданного метода UMI CMS
- Выводим случайную статью в UMI CMS с помощью usel в tpl
- UMI.CMS Открыть закрытые поля в шаблонах данных ?skip-lock=1
- Как отредактировать облако тегов
- Как узнать позицию страницы среди соседних страниц в UMI
- umi cms usel вывод страниц каталога c фильтрацией
- Вывод справочника при помощи usel
- Как в umi узнать umiHierarchyElement из id umiObject
- Карта сайта на UMI CMS с помощью кастомного метода
- Редирект со страницы на страницу
- Создание, обслуживание, поддержка сайта
- Как удалить в картинке jpg, jpeg, gif? eval или base64_decode
- Основные технические ошибки, допускаемые при создании сайта
- Как выбрать домен?
- Хостинг, что это и для чего он нужен
- htaccess редиректы
- Наполнение сайта
- Цены на разработку сайта в Петербурге
- Какова может быть стоимость поддержки сайта?
- Важные мелочи!
- Каким должен быть сайт по версии яндекса
- 5 советов верстальщику
- Копирайтинг, seo, продвижение
- Ранжирование сайтов в поисковиках, выдача поисковых систем, поисковый алгоритм, поисковое ранжирование сайта
- Что нужно делать чтобы сайт был на первых местах?
- Копирайтинг - что это?
- Добавить сайты в индекс поисковых систем, регистрация в поисковиках
- Почему сайт не может приносить прибыль сразу?
- Почему следует вкладывать деньги в сайт?
- SEO статья о SEO-копирайтинге (seo copyrighting, seo copywriting). Кто seo копирайтер, что такое seo текст сайта, как помогают seo статьи и зачем нужна оптимизация?
- Как верстать сайт для SEO?
- Контекстная реклама
Добавляем в вывод страницы тэг сanonical UMI CMS
Добавляем в выводимый шаблон тэг сanonical который будет реагировать на параметр пагинации в адресной строке - ?p=
Создаём файлы
/templates/website/classes/modules/content/class.php
/templates/website/classes/modules/content/events.php
В class.php вставляем код:
/*
rel canonical использует 2 метода: onUmiSpecSeoCanonicalBuffer и getCanonicalLink, параметры хранятся в переменной $allowedParams
В config.ini -> buffer-send-event-enable = "1"
В events.php добавить new umiEventListener('systemBufferSend', 'content', 'onUmiSpecSeoCanonicalBuffer');
*/
public function onUmiSpecSeoCanonicalBuffer(iUmiEventPoint $eventPoint) {
/*if(self::$bufferModified) {
return false;
}*/
$regedit = isset($this->regedit) ? $this->regedit : regedit::getInstance();
/*if(!$regedit->getVal(self::registry_canonical_enabled)) {
return false;
}*/
$cmsController = isset($this->cmsController) ? $this->cmsController : cmsController::getInstance();
if($cmsController->getCurrentMode() !== '') {
return false;
}
$buffer = &$eventPoint->getRef('buffer');
if(strpos($buffer, 'rel="canonical"') !== false || strpos($buffer, "rel='canonical'") !== false) {
return false;
}
$link = $this->getCanonicalLink();
$buffer = str_replace('</head>', '<link rel="canonical" href="' . $link . '" /></head>', $buffer);
//self::$bufferModified = true;
}
public function getCanonicalLink() {
$requestUri = getServer('REQUEST_URI');
if(!$requestUri) {
return false;
}
$parsed = @parse_url($requestUri);
$baseLink = getArrayKey($parsed, 'path');
$cmsController = isset($this->cmsController) ? $this->cmsController : cmsController::getInstance();
$regedit = isset($this->regedit) ? $this->regedit : regedit::getInstance();
$domain = $cmsController->getCurrentDomain()->getCurrentHostName();
$params = array();
$query = getArrayKey($parsed, 'query');
if ($query) {
parse_str($query, $params);
if (isset($params['p']))
unset($params['p']);
if (isset($params['xmlMode']))
unset($params['xmlMode']);
//$allowedParams = $regedit->getVal(self::registry_canonical_allowed_params);
$allowedParams = "p";
if($allowedParams) {
$allowedParams = array_map('trim', explode(',', $allowedParams));
$newParams = array();
foreach($params as $param => $value) {
if(!in_array($param, $allowedParams)) {
continue;
}
$newParams[$param] = $value;
}
$params = $newParams;
}
}
// Загружает из config.ini https или http
$config = mainConfiguration::getInstance();
$serverProtocol = $config->get('system', 'server-protocol');
$link = $serverProtocol . '://' . $domain . $baseLink;
if($params) {
$link .= '?'. http_build_query($params);
}
$eventPoint = new umiEventPoint('umiSpecSeoGenerateCanonicalLink');
$eventPoint->setMode('process');
$eventPoint->setParam('domain', $domain);
$eventPoint->setParam('params', $params);
$eventPoint->setParam('baseLink', $baseLink);
$eventPoint->addRef('link', $link);
$eventPoint->call();
return $link;
}
В events.php добавляем:
new umiEventListener('systemBufferSend', 'content', 'onUmiSpecSeoCanonicalBuffer');