Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - 0xDEFACE

Страницы: [1] 2
1
Цитировать
Так что не забудьте задокументировать изменения и сделать копию, чтобы иметь возможность восстановить указанный функционал после обновления.
Я в курсе, спасибо. Не впервой :)

2
Я уже вчера осилил эту таску. Увы, без жертв среди системных файлов движка не обошлось. Добавил что-то вроде этого в /classes/system/subsystems/cmsController/cmsController.php

public function setDirectElementId()
{
$parsed_uri = explode('/', trim($_SERVER["REQUEST_URI"]));
if (count($parsed_uri) == 3)
{
$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');
foreach($pages as $page)
{
if ($page->getAltName() == $parsed_uri[1])
{
$this->current_element_id = $page->getId();
$this->setCurrentMethod("object");
$this->setCurrentModule("catalog");
break;
}
}
}
}
и вызвал из analyzePath()

Редирект с /katalog/razdel/subrazdel/super-item/ и /super-item/ оказалось самой простой задачей ( /libs/root-src/index.php )

if ( ($currentMethod == "object") && ($currentModule == "catalog") )
{
if ( strpos($this_uri, '/katalog/') !== false )
{
$original_uri = $parsed_uri[count($parsed_uri) - 2]."/";
$buffer->redirect('http://'.$host."/".$original_uri, '301 Moved Permanently', 301);
}
}
Единственное, что меня смущает, так это реализация поиска id элемента по alt_name (через selector). Я перебираю все выбранные варианты в foreach, но может это как-то сделать с использованием where(), быстрее было бы?

3
Адреса важно сохранить: /katalog/razdel/subrazdel/super-item/ должен равняться "/super-item/", а вирт копии создаются с другим alt-name...

4
А может не стоит этого делать? Если есть желание сделать чтобы по пути товара открывался товар - может проще сделать виртуальную копию всех товаров?
Изначально был такой план. Но нужно что бы при обращении к site.ru/super-item/ хлебные крошки были как у "/katalog/razdel/subrazdel/super-item/":
Ktalog -> Razdel -> Subrazdel

5
Получилось, спасибо!

$pages = new selector('pages');
$pages->types('hierarchy-type')->name('catalog', 'object');

$new_id = "";

foreach($pages as $page)
{
if ($page->getAltName() == $parsed_uri[1])
{
$new_id = $page->getId();
break;
}
}
Подскажите ещё, пож-та, как указать найденный $new_id, чтобы вместо 404 "бралась" и выводилась нужная страница? Контент страницы генерируется этим:

$globalVars = $cmsController->getGlobalVariables();
Если обращаться к site.ru/super-item/, то по понятным причинам генерируется notfound. Как сообщить $cmsController, чтобы он работал с найденным $new_id?

P.S. Работаю с файликом libs/root-src/index.php

6
Коллеги!

Есть страница site.ru/katalog/razdel/subrazdel/super-item/

Задача:
При обращении к site.ru/super-item/ получить id страницы "/katalog/razdel/subrazdel/super-item/".

Эксперименты с getIdByPath - показали, что она умеет возвращать id только по полному пути, но не по последней части.

$hierarchy = umiHierarchy::getInstance();
$original_id = $hierarchy->getIdByPath('/super-item/', true, $errors_count);
- возвращает false.

Да, можно подключиться напрямую к БД и сделать необходимую выборку, но может есть решение средствами UMI? Не могу найти исходник getIdByPath, его бы чуть-чуть модифицировать или лучше сделать кастомный вариант на основе оригинала.

7
Блеск! Работает как надо, спасибо!

8
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">


<!--CТРАНИЦА ОБЪЕКТА КАТАЛОГА--> 
<xsl:template match="result[@module='catalog' and @method='object']">
<div class="cont">
<xsl:apply-templates select="document('udata://core/navibar')/udata" mode="navibar"/>
<xsl:choose>
<xsl:when test="//property[@name='seostranica']/value = '1'">
<xsl:variable name="cat_seacrh" select="document(concat('udata://catalog/setPageFilter/', @pageId,'/', page/@type-id))"/>

<div class="products" style="padding-bottom: 3%; padding-top:0px;">
<div class="block_title"><xsl:value-of select="$pid_page//group[@name='common']/property[@name='h1']/value"/></div>
<div class="filter checkout" style="width:30%; float:left; border: 3px solid #00bbd3; padding-bottom: 34px;">
<xsl:apply-templates select="document(concat('udata://catalog/search/', $cat_root, '///86'))/udata" mode="search_filter" />
</div>

<div class="items" style="width:68%; float:right">
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsListCustom/', $cat_root,'/12/0/5'))/udata" mode="catalog_page_filter"/>
<!-- <xsl:apply-templates select="document(concat('udata://catalog/getObjectsListCustom/', $cat_root,'/', $cat_sort, '/0/5'))/udata" mode="catalog_page_filter"/> -->
<div class="clear"></div>
</div>

<div style="clear:both; width:100%"></div>


</div>

<!--
ЗДЕСЬ НУжНО ПРОВЕРИТЬ ЕСЛИ $_GET['p'] (она же $p) НЕ определена, то вывести этот блок:
======= НАЧАЛО БЛОКА =========
-->
<xsl:if test="//property[@name='opisanie']/value">

<div class="bottom_text">
<div class="cont">
<xsl:value-of select="//property[@name='opisanie']/value" disable-output-escaping="yes"/>
</div>
</div>

</xsl:if>
<!--
======= КОНЕЦ БЛОКА =========
-->

</xsl:when>
<xsl:otherwise>
и тут ещё много всего....

9
Что может быть не так? Я скопипастил то, что Вы предложили к себе в шаблон, вот и всё...

10
После такого определения "p", условие выполняется всегда вне зависимости от значения параметра ?p=N

11
В моём случае $p - это GET параметр. Если обращаться к странице, например, по адресу site/catalog/?p=2 то $p - определена и равна 2

Если обратиться просто site/catalog/ то $p получается не определена и шаблон крэшится. Вот мне надо как-то поймать этот момент, т.е. вывести "ОК", а не ломать шаблон.

Наверняка должно быть что-то вроде:
if ( !isset($p) ) { echo "OK" }

12
Это очень интересно и я обязательно присоединюсь к последующим курсам , но мне надо решить этот вопрос 3 дня назад.

Подскажите почему всё-таки не работает условие когда $p не определена - шаблон крэшится? Попытки проверить определена ли $p также "рвут шаблон"  :)

<xsl:if test="not($p)">ok</xsl:if>

13
Действительно, первый косяк уже всплыл. Если возвращаемое значение не одна строка, а набор строк, то вылетает ошибка:

var fb_link = ' <- здесь "Unexpected token ILLEGAL"
<html>
<head>
</head>
<body>
';

14
Спасибо, получилось. Даже экранировать одинарные кавычки не пришлось. Кто бы мог подумать... :-)

var fb_link = '<xsl:value-of select="$upage1/page/properties/group[@name='info']/property[@name='facebook']/value"/>';

15
Да, я только пару дней назад узнал о существовании UMI CMS :-)

Вставляю данное условие (да и вообще любое) в шаблон и если оно выполняется, то output обрывается сразу после этого места. Оставшаяся часть страницы и футер сайта как бы пропускаются и дописывается сразу </body></html>. Что не так?

Страницы: [1] 2