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

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

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Приветствую.
Возникла сложность с этим способом вывода количества просмотров страницы
http://wiki.umisoft.ru/%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0

Не работает. Если все делать по инструкции, то выводит целиком сайт в том месте, куда вставляю.
<xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))" />

Если вызвать сайт/udata/custom/counter   - то белый экран. Подскажите, как правильно вывести просмотры страницы новости.

Спасибо.

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #1 : 25 Февраля 2016, 15:53:45 »
<xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))/udata" />
Попробуйте так.

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #2 : 26 Февраля 2016, 11:15:31 »
Fatal error: Call to a member function getValue() on a non-object in custom.php

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #3 : 26 Февраля 2016, 11:24:54 »
Значит не правильно передаётся идентификатор страницы.

Напишите |<xsl:value-of select="page/@id"/>| и посмотрите, что будет на странице - скорее всего будут пустые скобки.


Можно попробовать слегка доработать предлагаемый в документации код:
1. теперь не нужно передавать идентификатор страницы
2. не будет ошибки, если вдруг не удастся получить идентификатор страницы

public function counter($current_page_id = false) {
    $current_page_id = $current_page_id ? $current_page_id : cmsController::getInstance()->getCurrentElementId();
    $hierarchy = umiHierarchy::getInstance();
    $element=$hierarchy->getElement($current_page_id);
    if($element){
        $temp_count=$element->getValue("kolichestvo_prosmotrov");
        ++$temp_count;
        $element->setValue("kolichestvo_prosmotrov",$temp_count);
        $element->commit();
        return $element->getValue("kolichestvo_prosmotrov");
    }       
}

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #4 : 26 Февраля 2016, 11:32:59 »
Сделал. Ничего не выводит.
Как посмотреть, работает ли вообще это?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #5 : 26 Февраля 2016, 11:35:56 »
Значит Вы не правильно передаёте идентификатор страницы.
Есть два варианта:
1. Разобраться, как передать текущей идентификатор страницы в метод
2. Заменить метод на тот, что я дал в предыдущем сообщение (естественно, в нём нужно заменить название поля "kolichestvo_prosmotrov" на своё)

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #6 : 26 Февраля 2016, 11:38:24 »
Я сделал, как Вы написали, пусто.
Я правильно понимаю, что kolichestvo_prosmotrov - это идентификатор поля типа счетчик в шаблоне данных страница контента?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #7 : 26 Февраля 2016, 12:24:26 »
Да, правильно.

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #8 : 26 Февраля 2016, 12:27:59 »
Тогда все сделано как написано, но пусто. Ничего не выводит.
Функцию взял Вашу, вывожу <xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))/udata" /> так.

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #9 : 26 Февраля 2016, 12:40:44 »
Для понимания нужен некоторый навык в XSLT.


Вывод метода меняем на следующее:
<xsl:value-of select="document(concat('udata://custom/counter/',page/@id))/udata" />
Если не заработало, то дорабатываем метод:

public function counter($current_page_id = false) {
    $current_page_id = $current_page_id ? $current_page_id : cmsController::getInstance()->getCurrentElementId();
    $hierarchy = umiHierarchy::getInstance();
    $element=$hierarchy->getElement($current_page_id);
    if($element){
        $temp_count=$element->getValue("kolichestvo_prosmotrov");
        ++$temp_count;
        $element->setValue("kolichestvo_prosmotrov",$temp_count);
        $element->commit();
        return $element->getValue("kolichestvo_prosmotrov");
    }else{
        return "Страница не найдена";   
    }
}

Если вывело "Страница не найдена", то меняем вывод на <xsl:value-of select="document('udata://custom/counter/')/udata" />



*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #10 : 26 Февраля 2016, 12:53:03 »
Спасибо, заработало

*

crazygeorgio

  • ***
  • 140
  • +7/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #11 : 27 Февраля 2016, 17:51:44 »
всегда было интересно, а зачем вообще такой функционал нужен? где он востребован?

*

ragivort

  • *
  • 20
  • +0/-0
    • Просмотр профиля
Re: Вывод количества просмотров на странице
« Ответ #12 : 27 Февраля 2016, 18:09:04 »
Не знаю для чего, метрика с этим вполне справляется. Клиенты просят. Просто в других движках это встроено, а тут ковырять надо