Сохранить
Сохраняем
  • A
    alexxx

    @Andchir спасибо огромное - все работает отлично
    Но я все же хочу для себя разобраться - можно Вас попросить подсказать что обозначает .

    $view = $page->get('hits') ?: 0;
    

    и почему через if

    if (!$page) {
        return 0;
    }
    

    написал в Поддержка Читать далее
  • A
    alexxx

    что то у меня ничего не получается )))
    значит - пакет подключил - и я это понял (спасибо @Andchir ).
    потом мы $page определяем по id с таблицы.

    $page =  $modx->getObject('PostCo', $modx->resource->get('id'));
    

    в таблице PostCo создаем две строки

    <field key="hits" dbtype="varchar" precision="255" phptype="string" null="true" default="0" />
    <field key="view" dbtype="varchar" precision="255" phptype="string" null="true" default="0" />
    

    ))) ну так чтоб наверняка

    и все ..... я с**ка приехал, и пол ночи смотрю как наркоман на код и ничего не могу понять )))

    <?php
    
    $modelpath = $modx->getOption('core_path') . 'components/post/model/';
    $modx->addPackage('post', $modelpath);
    
    $page =  $modx->getObject('PostCo', $modx->resource->get('id'));
    
    $view = 0;
    
    $view->get('value');
    $view->set('value',intval($view) + 1);
    $page->set('hits',intval($view) + 1);
    $page->save();
    return $view;
    

    одни ошибки.
    Кстати, я так понял что синтакс Модх -PhpStorm не понимает....

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir спасибо большое за подсказку, код за меня я не прошу писать - я сам буду пробивать ))

    написал в Поддержка Читать далее
  • A
    alexxx

    Может в плагин HitsPage как-то прописать чтоб данные брались только с таблицы, точнее исключить modResource

    $config =  array( 
        'packageNames' => 'modResource,shop',
        'classNames' => 'modResource,ShopContent',
        'contexts' => 'web,catalog',
    

    а результат записовался в отдельное поле в таблице Продуктов/статтей

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir помоги пожалуйста. Как организовать статистику по товарам или статьям.
    Хорошо было бы чтоб это было какое-то поле в Migx shema - по которому можно и фильтровать

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir а вот еще нашел такой пакет siteStatistics
    Плагин

    <?php
    $path = $modx->getOption('sitestatistics_core_path', null, $modx->getOption('core_path') . 'components/sitestatistics/') . 'services/';
    
    $userAgents = $modx->getOption('stat.not_allowed_user_agents');
    if (!empty($userAgents)) {
        $userAgents = explode(',', $userAgents);
        //$userAgents = array_map('trim', $userAgents);
        foreach ($userAgents as &$userAgent) {
            $userAgent = trim($userAgent);
            $userAgent = preg_quote($userAgent);
        }
        $userAgents = implode('|', $userAgents);
        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?: 'empty';
        if (preg_match("/($userAgents)/i", $userAgent)) return;
    }
    
    switch ($modx->event->name) {
        case 'OnLoadWebDocument': {
            if ( ($modx->getOption('stat.enable_statistics', null, false) || $modx->getOption('stat.count_online_users', null, false)) && $modx->getOption('site_status')) {
                /** @var siteStatistics $siteStat */
                $siteStat = $modx->getService('sitestatistics', 'siteStatistics', $path);
                // Disable statistics for specified IPs.
                if (!$siteStat->checkIp()) {
                    return;
                }
                $siteStat->defineUserKey();
                // Consider statistics
                if ($modx->getOption('stat.enable_statistics', null, false)) {
                    $siteStat->setStatistics();
                }
                //  Online Users
                if ($modx->getOption('stat.count_online_users', null, false)) {
                    $siteStat->setUserStatistics();
                }
                $siteStat->need2ClearCache = $siteStat->getMessage();
            }
            break;
        }
        case 'OnWebPageComplete': {
            $modx->sitestatistics->clearCache();
            unset($modx->sitestatistics);
            break;
        }
        case 'OnDocFormPrerender':
            if ($mode == modSystemEvent::MODE_UPD && $modx->getOption('stat.show_tab_in_resource_form', null, true)) {
                /** @var siteStatistics $siteStat */
                $siteStat = $modx->getService('sitestatistics', 'siteStatistics', $path);
                $siteStat->initializeMgr(true);
    
            }
            break;
    }
    

    и снипет

    <?php
    /** @var array $scriptProperties */
    /** @var siteStatistics $siteStat */
    if (!$siteStat = $modx->getService('sitestatistics', 'siteStatistics', $modx->getOption('sitestatistics_core_path', null, $modx->getOption('core_path') . 'components/sitestatistics/') . 'services/')) {
    	return 'Could not load siteStatistics class!';
    }
    // mode: page/site
    if (empty($mode)) $mode = $scriptProperties['mode'] = 'page';
    if (empty($tpl)) $scriptProperties['tpl'] = 'tpl.siteStatistics';
    if (empty($resource)) $resource = $modx->resource->id;
    
    $siteStat->initialize($scriptProperties);
    
    if ($mode == 'page') {
    	/** @var array|int $output */
    	$output = $siteStat->getPageStatistics($resource);
    	if (!empty($toPlaceholders))
    		$modx->toPlaceholders($output,'stat');
    	else
    		return $output;
    } else {
    	return $siteStat->getSiteStatistics();
    }
    

    Этот пакет подойдет под статьи из отдельной таблицы?

    написал в Поддержка Читать далее
  • A
    alexxx

    Участник @Andchir написал в работал вывод - и тут бабах .... что случилось непойму. Подскажите плиз:

    if (!$page) {
    return 0;
    }

    дабавил этот код и статья открылась норм - но калькулятор тут не рабочий. На других статьях количество считает норм ......

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir я имел ввиду ( возможно TV с данными числом) которое как и TV Price присутствует с Migx Shema.
    Или же плагин который на условие, открытия виртуальной страницы - перезаписывает поле таблицы Shema Migx добавляя +1.
    Просто может есть такие варианты, просто я нашёл только HitsPage
    плагин

    <?php
    
    switch ($modx->event->name) {
        case 'OnWebPagePrerender':
            if($modx->hpCount === true) {
                // get a reference to the output
    			$output = &$modx->resource->_output;
        		if (preg_match_all ("/{%hp-(.*?)%}/",$output , $hp_list)) {
    			  // If the array is not empty, choose the number of comments on the resource id (column rid)
    			  if (is_array($hp_list)) {
    				  array_walk($hp_list[1], 'intval');
    				  $hp = $modx->newQuery('modResource', array('id:IN' => $hp_list[1]));
    				  $hp->select(array('modResource.id','modResource.properties'));
    				  if ($hp->prepare() && $hp->stmt->execute()) {
    					  $resultsHp = $hp->stmt->fetchAll(PDO::FETCH_ASSOC);
    					  foreach ($resultsHp as $rHp) {
    						  $objHP = json_decode($rHp['properties']);
    						  if (in_array($rHp['id'],$hp_list[1])) {
    							  $hp_list[1][array_search($rHp['id'],$hp_list[1])] =  intval($objHP->hitspage->hitts);
    						  }
    					  }
    				  }
    			  }
    			  // Replace all your templates in the resource to the correct values
    			  $output = str_replace($hp_list[0], $hp_list[1], $output);
    		  }
            }
        break;
    }
    

    и снипет

    <?php
    $page =  $modx->getObject('modResource', $modx->resource->get('id'));
    $view = 0;
    // Check the option to record in TV
    if($saveTv == 'true') {
        // get the required TV object by name (or id)
        $tv = $modx->getObject('modTemplateVar',array('name'=>'HitsPage'));
        if($tv) {
            $tvs = $modx->getObject('modTemplateVarResource',array('tmplvarid'=>$tv->id, 'contentid'=>$page->get('id')));
            if($tvs) {
                $viewTv = $tvs->get('value');
                $tvs->set('value',intval($viewTv) + 1);
                if($tvs->save()) $view = $viewTv;
            } else {
                $tvn = $modx->newObject('modTemplateVarResource');
                $tvn->set('tmplvarid',$tv->id);
                $tvn->set('contentid',$page->get('id'));
                $tvn->set('value',1);
                if($tvn->save()) $view = 1;
            }       
        } 
    } else {
        $view = $page->getProperty('hitts','hitspage',$view);
    }
    $page->setProperty('hitts',intval($view) + 1,'hitspage');
    $page->save();
    return $view;
    

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir та нет - нормально считает и работает в товарах из статьи. Но вот например счётчик дошёл до 4150 просмотров ... и бах ошибка.
    А можно в migx таблице добавить строку ( через Tv) чтоб автоматически плюсовало +1 при каждом заходе)

    написал в Поддержка Читать далее
  • A
    alexxx

    @Andchir да все откоректировал как вы указали, и все супер. Просто Head был один для всех )))
    Под #50 снипет HitsPage
    На странице он выводится вот так [[!HitsPage? &saveTv=‘true’]] (на тел пишу - символ кавычек не тот).

    написал в Поддержка Читать далее