UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: ragivort от 16 Февраля 2016, 13:34:04

Название: Вывод количества просмотров на странице
Отправлено: ragivort от 16 Февраля 2016, 13:34:04
Приветствую.
Возникла сложность с этим способом вывода количества просмотров страницы
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   - то белый экран. Подскажите, как правильно вывести просмотры страницы новости.

Спасибо.
Название: Re: Вывод количества просмотров на странице
Отправлено: Rodogor от 25 Февраля 2016, 15:53:45
<xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))/udata" />
Попробуйте так.
Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 26 Февраля 2016, 11:15:31
Fatal error: Call to a member function getValue() on a non-object in custom.php
Название: Re: Вывод количества просмотров на странице
Отправлено: Rodogor от 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");
    }       
}
Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 26 Февраля 2016, 11:32:59
Сделал. Ничего не выводит.
Как посмотреть, работает ли вообще это?
Название: Re: Вывод количества просмотров на странице
Отправлено: Rodogor от 26 Февраля 2016, 11:35:56
Значит Вы не правильно передаёте идентификатор страницы.
Есть два варианта:
1. Разобраться, как передать текущей идентификатор страницы в метод
2. Заменить метод на тот, что я дал в предыдущем сообщение (естественно, в нём нужно заменить название поля "kolichestvo_prosmotrov" на своё)
Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 26 Февраля 2016, 11:38:24
Я сделал, как Вы написали, пусто.
Я правильно понимаю, что kolichestvo_prosmotrov - это идентификатор поля типа счетчик в шаблоне данных страница контента?
Название: Re: Вывод количества просмотров на странице
Отправлено: Rodogor от 26 Февраля 2016, 12:24:26
Да, правильно.
Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 26 Февраля 2016, 12:27:59
Тогда все сделано как написано, но пусто. Ничего не выводит.
Функцию взял Вашу, вывожу <xsl:apply-templates select="document(concat('udata://custom/counter/',page/@id))/udata" /> так.
Название: Re: Вывод количества просмотров на странице
Отправлено: Rodogor от 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" />


Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 26 Февраля 2016, 12:53:03
Спасибо, заработало
Название: Re: Вывод количества просмотров на странице
Отправлено: crazygeorgio от 27 Февраля 2016, 17:51:44
всегда было интересно, а зачем вообще такой функционал нужен? где он востребован?
Название: Re: Вывод количества просмотров на странице
Отправлено: ragivort от 27 Февраля 2016, 18:09:04
Не знаю для чего, метрика с этим вполне справляется. Клиенты просят. Просто в других движках это встроено, а тут ковырять надо