Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Макрос emarket basketAddLink - отсутствие ссылки купить если цена 0

Автор koroganРаздел Макросы UMI.CMS

Ответов: 3
Просмотров: 3516
Последний ответ 25 Апреля 2012, 01:19:03
от admin
Картинка в ссылке. Если нет картинки, то не должно быть и ссылки

Автор BAVРаздел Шаблоны TPL

Ответов: 6
Просмотров: 4479
Последний ответ 08 Декабря 2011, 18:04:52
от Vladimir
не могу добавить виртуальные копии и ссылки на похожие страницы

Автор voldРаздел Наполнение сайтов

Ответов: 6
Просмотров: 56418
Последний ответ 20 Октября 2013, 16:21:58
от vold
Внешние ссылки сделать внутренними

Автор koroganРаздел Настройка системы и модулей

Ответов: 3
Просмотров: 2862
Последний ответ 26 Августа 2011, 15:29:20
от admin
Вывод ссылки в определенных разделах

Автор alpotemkinРаздел Шаблоны TPL

Ответов: 6
Просмотров: 4252
Последний ответ 28 Октября 2011, 11:49:29
от alpotemkin

0 Пользователей и 1 Гость просматривают эту тему.

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
класс ссылки
« : 02 Ноября 2012, 17:20:10 »
мучаюсь уже пол дня... у меня сделана сортировка объектов кастомным макросом. сортируются по цене и наименованию. при нажатии на ссылку цена или наименование к ссылке приписывается ?&order_filter[price]=1 например.
Мне надо сделать так, чтобы при активной ссылки ей присваивался class="active"
ума не приложу как условие поставить(((

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #1 : 02 Ноября 2012, 18:00:11 »
А шаблончики вывода Ваши не покажете ?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #2 : 03 Ноября 2012, 13:35:33 »
я думаю, ваш кастомный макрос, в идеале, должен возвращать статус, который вы можете вставить в вашу ссылку. Можете привести сюда ваш кастом?

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #3 : 06 Ноября 2012, 09:25:32 »
ну кастом я взяла где то с этого сайта в заметках или уроках.. не помн.  вот он:
public function order_by($fieldName, $parent_id=NULL, $typeId=NULL, $template = "default") {
    if(!$fieldName) return;
    $from = Array('%5B', '%5D');
    $to = Array('[', ']');
    $result = self::generateOrderBy($fieldName, $typeId, $template, $parent_id);
    $result = str_replace($from, $to, $result);
    return $result;
}
 
public static function generateOrderBy($fieldName, $type_id, $template = "default", $parent_id) {
 
    if(!$template) $template = "default";
    list($template_block, $template_block_a1, $template_block_a2) = def_module::loadTemplates("tpls/numpages/{$template}.tpl", "order_by", "order_by_a", "order_by_b");
 
    if(!$parent_id) $parent_id = cmsController::getInstance()->getCurrentElementId();
    $i_need_deep = 1;
    if(!$type_id) $type_id = umiHierarchy::getInstance()->getDominantTypeId($parent_id, $i_need_deep);
 
    if(!($type = umiObjectTypesCollection::getInstance()->getType($type_id))) return "";
 
    $block_arr = Array();
    if(($field_id = $type->getFieldId($fieldName)) || ($fieldName == "name")) {
        $params = $_GET;
 
        unset($params['path']);
        $order_filter = getArrayKey($params, 'order_filter');
 
        $tpl = 0;   
        if(is_array($order_filter)) {
            if (array_key_exists($fieldName, $order_filter)){
                if ($order_filter[$fieldName] == 1){
                    $tpl = $template_block_a1;
                    unset($params['order_filter']);
                    $params['order_filter'][$fieldName] = 0;
                    $order_direction = 1;
                } else {
                    $tpl = $template_block_a2;
                    unset($params['order_filter']);
                    $params['order_filter'][$fieldName] = 1;
                    $order_direction = 0;
                }
            } else {
                unset($params['order_filter']);
                $params['order_filter'][$fieldName] = 1;
                $tpl = $template_block;
                $order_direction = 'non';
            }
        } else {
        unset($params['order_filter']);
        $params['order_filter'][$fieldName] = 1;
        $tpl = $template_block;
        $order_direction = 'non';
        }
 
        $params = self::protectParams($params);
        $q = (sizeof($params)) ? "&" . http_build_query($params, '', '&') : "";
        //$q = (sizeof($params)) ? "&" . str_replace("&", "&", http_build_query($params)) : "";
        $q = urldecode($q);
        $q = str_replace("%", "%", $q);
 
        $block_arr['link'] = "?" . $q;
        $block_arr['attribute:direction'] = $order_direction; //главное тут
 
        if($fieldName == "name") {
            $block_arr['title'] = getLabel('field-name');
        } else {
            $block_arr['title'] = umiFieldsCollection::getInstance()->getField($field_id)->getTitle();
        } 
        return def_module::parseTemplate($tpl, $block_arr);
    }
    return "";
}
 
protected static function protectParams($params) {
    foreach($params as $i => $v) {
        if(is_array($v)) {
            $params[$i] = self::protectParams($v);
        } else {
            $v = htmlspecialchars($v);
            $params[$i] = str_replace("%", "%", $v);
        }
    }
    return $params;

<!-- сортировка -->
<xsl:template match="udata[@module='custom' and @method = 'order_by']">
<xsl:attribute name="href">
<xsl:value-of select="link" />
</xsl:attribute>


<xsl:if test="@direction!='non'">
<xsl:attribute name="class">
active
</xsl:attribute>
</xsl:if>

</xsl:template>
<xsl:template match="udata" mode="object_list">
<!--xsl:apply-templates select="document('udata://catalog/search')" /-->
<!--div class="catalog open-sans" umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable" umi:add-method="popup"-->
<div class="standardDoc section open-sans">
<p>
<xsl:text>&empty-category;</xsl:text>
</p>
</div>
</xsl:template>

<xsl:template match="udata[total &gt; 0]" mode="object_list">
<xsl:variable name="row-limit" select="3" />
<div>

<div class="catalog_caption" category="{category_id}">
<div class="sort-options">
<span class="title">Сортировать по:</span>
<xsl:variable name="order_by_price" select="document(concat('udata://custom/order_by/price/',category_id))" />

<xsl:choose>
<xsl:when test="boolean($order_by_price/udata/link)">
<a><xsl:apply-templates select="$order_by_price" />цене</a>
</xsl:when>
<xsl:otherwise>
<a><xsl:apply-templates select="document(concat('udata://custom/order_by/price//',category_id))" />цене</a>
</xsl:otherwise>
</xsl:choose>
<a><xsl:apply-templates select="document(concat('udata://custom/order_by/title/',category_id))" />наименованию</a>
<!--a><xsl:apply-templates select="document(concat('udata://custom/order_by/.../',category_id))" />дате поступления</a-->
</div>

</div>
Ну тут выводятся объекты каталога еще неотсортированные. Но хотелось бы чтобы они сразу отсортироанные выводились и эта сортировка была помечена.
</div>
<div class="clear" />

<xsl:apply-templates select="total" />
</xsl:template>

Ну и в result вывожу все это:

<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList//', page/@id, '///100/'))/udata" mode="object_list" />

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #4 : 07 Ноября 2012, 08:33:49 »
во первых не понял зачем вам нужен такой блок

<xsl:variable name="order_by_price" select="document(concat('udata://custom/order_by/price/',category_id))" />

            <xsl:choose>
               <xsl:when test="boolean($order_by_price/udata/link)">
                  <a><xsl:apply-templates select="$order_by_price" />цене</a>
               </xsl:when>
               <xsl:otherwise>
                  <a><xsl:apply-templates select="document(concat('udata://custom/order_by/price//',category_id))" />цене</a>               
               </xsl:otherwise>
            </xsl:choose>

а во вторых, у каждой ссылки есть атрибут direction, который может иметь значения 'non' - сортировка по данной ссылке не использовалась, '1' и '0' сортировка по ссылке использовалась и имеет определенное направление

код скорее всего вы взяли сиз статьи http://umihelp.ru/articles/custom_order_by-for_xslt/ и там же есть пример xslt шаблона по выводу разных ссылок в зависимости от осуществляется ли сейчас сортировка и в каком направлении

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #5 : 07 Ноября 2012, 09:47:55 »
1. Это сделано, чтоб сортировка работала в тех каталогах, где есть только подкаталоги с объектами, а объектов нет.

2. так как у меня класс ссылки не меняется в зависимости отнаправления сортировки, поэтому у меня прописано @direction!='non'
а не @direction='1' и @direction='0'
мне нужно чтоб, просто выделялась ссылка при входена страницу.. и снималось выделение при выборе сортировки...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #6 : 07 Ноября 2012, 10:41:35 »
то есть, с вопросом как вывести каталог сразу отсортированный вы выяснили, а вот как при этом пометить ссылку на соответствующую сортировку, учитывая что в адресной строке нет параметра сортировке, вам  и не понятно, так?

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #7 : 07 Ноября 2012, 11:07:07 »
именно... я хочу вообще сделать ссылку которая возвращает на сортировку по умолчанию.. ссылка у меня есть... класс ей присвоила.. а как его убрать, когда включаю сортировку и вернуть когда возвращаюсь по этой ссылке обратно не понимаю..(

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #8 : 07 Ноября 2012, 11:23:02 »
предположим, что у вас есть ссылка на сортировку по цене и прочие сортировки, а также у вас есть прочие сортировки. По умолчанию, при загрузке каталога происходит сортировка по цене, но как следствие в адресной строке нет параметров, по которым можно было бы отловить, по какому полю идет сортировка. Поэтому, вы прописываете класс в стилях (для выделения ссылки на ссортировки по цене) при формировании html данной страницы. для того чтобы эта ссылка исчезала когда выбрана другая сортировка, вам надо сделать так

все вызовы макроса сортирки для всех полей загнать в переменные чтобы их можно было несколько раз использовать и не делать повторных вызовов

так же как вы и делали в вашем коде
<xsl:variable name="order_by_price" select="document(concat('udata://custom/order_by/price/',category_id))" />
<xsl:variable name="order_by_proizvoditel" select="document(concat('udata://custom/order_by/proizvoditel/',category_id))" />
<xsl:variable name="order_by_else" select="document(concat('udata://custom/order_by/else/',category_id))" />
и т.д.

далее вы пишете условие в котором проверяете нет ли сортировки по другим ссылкам и если их нет, то класс для ссылки сортировки по цене выставляется, иначе он заменяется другим или убирается вовсе... сама проверка выглядит примерно так

шаблон где вы делаете вызов макроса для вывода ссылок сортировки
<xsl:variable name="order_by_price" select="document(concat('udata://custom/order_by/price/',category_id))" />
<xsl:variable name="order_by_proizvoditel" select="document(concat('udata://custom/order_by/proizvoditel/',category_id))" />
<xsl:variable name="order_by_else" select="document(concat('udata://custom/order_by/else/',category_id))" />
<div class="default_sort">
<xsl:if test="not($order_by_proizvoditel/@direction='non') or not($order_by_else/@direction='non')"><xsl:attribute name="class">special_sort</xsl:attribute ></xsl:if>
<xsl:apply-templates select="$order_by_price" />
<xsl:apply-templates select="$order_by_proizvoditel" />
<xsl:apply-templates select="$order_by_else" />

</div>

при этом класс default_sort будет в случае когда не применяются сортировки по полю proizvoditel и полю else, в других случаях он замениться на класс special_sort
« Последнее редактирование: 07 Ноября 2012, 11:28:23 от admin »

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #9 : 07 Ноября 2012, 12:31:33 »
не убирается класс special_sort... всегда он.. какую бы я сортировку не выбрала(

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #10 : 07 Ноября 2012, 12:48:03 »
свой код сюда выкладывайте, в логике проверке надо порыться

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #11 : 07 Ноября 2012, 14:20:56 »
<xsl:variable name="order_by_price_a" select="document(concat('udata://custom/order_by/price//',category_id))" />
<xsl:variable name="order_by_price" select="document(concat('udata://custom/order_by/price/',category_id))" />
<xsl:variable name="order_by_title" select="document(concat('udata://custom/order_by/title/',category_id))" />
<a class="noactive" href="{$link}">
<xsl:if test="not($order_by_price/@direction='non') or not($order_by_title/@direction='non') or not($order_by_price_a/@direction='non')">
<xsl:attribute name="class">
active
</xsl:attribute>
</xsl:if>
по умолчанию</a>
<xsl:choose>
<xsl:when test="boolean($order_by_price/udata/link)">
<a>
<xsl:apply-templates select="$order_by_price" />цене</a>
</xsl:when>
<xsl:otherwise>
<a><xsl:apply-templates select="$order_by_price_a" />цене</a>
</xsl:otherwise>
</xsl:choose>
<a><xsl:apply-templates select="$order_by_title" />наименованию</a>

*

niakriss

  • ***
  • 190
  • +2/-0
    • Просмотр профиля
Re:класс ссылки
« Ответ #12 : 07 Ноября 2012, 15:48:03 »
все получилось)) надо было все наоборот сделать и добавить udata...
вот так:
<xsl:if test="$order_by_title/udata/@direction='non' and $order_by_price_a/udata/@direction='non'">
<xsl:attribute name="class">
active
</xsl:attribute>
</xsl:if>

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:класс ссылки
« Ответ #13 : 08 Ноября 2012, 05:41:05 »
точно в условии был затык)