Последние темы


SHK_Sitemap

  • Андрей, обновите, пожалуйста, shk_sitemap. Я выкладывал в старый форум последний код, там частота обновления добавлена, исключение ресурсов и т.п.

    <?php
    /**
     * snippet shk_sitemap
     *
     * @author slaad
     * 
     */
    
    /*
    
    http://modx-shopkeeper.ru/forum/viewtopic.php?pid=20545#p20545
    
    Examples
    
    1. Only resources (one or more contexts):
    
    [[shk_sitemap?
    &packageNames=`modResource`
    &classNames=`modResource`
    ]]
    
    2. Resources and shop package (Shopkeeper), two contexts:
    
    [[shk_sitemap?
    &packageNames=`modResource,shop`
    &classNames=`modResource,ShopContent`
    &contexts=`web,catalog`
    ]]
    3. Excluding resources 
      
     excluding resources with ids 17,23,31,16:
    
    [[shk_sitemap?
    &packageNames=`modResource,shop`
    &classNames=`modResource,ShopContent`
    &contexts=`web,catalog`
    &excludeModResIds=`17,23,31,16`    
    ]]
     and excluding resources with ids 17,23,31,16 and 1 level childs of resources with ids 17,11,23,14
    [[shk_sitemap?
    &packageNames=`modResource,shop`
    &classNames=`modResource,ShopContent`
    &contexts=`web,catalog`
    &excludeModResIds=`17,23,31,16`
    &excludeModContIds=`17,11,23,14`
    ]]
     
      
      
      
    */
    
    $config =  array( 
        'packageNames' => 'modResource,shop',
        'classNames' => 'modResource,ShopContent',
        'contexts' => 'web,catalog',
        'site_url'=> $modx->getOption('site_url'),
        'site_start'=> $modx->getOption('site_start', null, 1),
        'excludeModResIds'=>'17,23,31,16,19,20',
        'excludeModContIds'=>'17,11,23,14'
    );
    $contentType = $modx->getObject('modContentType',array('name'=>'HTML'));
    $config['urlSuffix']= $contentType->getExtension();
    $config['containerSuffix']=$modx->getOption('container_suffix');
    $config = array_merge( $config, $scriptProperties );
    
    
    $packageNames = explode(',',$config['packageNames']);
    $classNames = explode(',',$config['classNames']);
    $contexts = explode(',',$config['contexts']);
    
    $output = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
    
    if(!function_exists('getMapQuery')){
    function getMapQuery($className,$select,$where){
        global $modx;
            $query = $modx->newQuery($className);
            $query->select($select);
            $query->where($where);
            $query->sortby('id','ASC');        
            if ( $query->prepare() && $query->stmt->execute() ){     
                $query_out= array();
                //$modx->log(modX::LOG_LEVEL_ERROR, $query->toSql());
                $query_out=$query->stmt->fetchAll(PDO::FETCH_ASSOC);
    
                foreach($query_out as $r){
                    if (!isset($resources[$r['id']])) $resources[$r['id']]=array();
                    foreach ($select as $s){
                        $resources[$r['id']][$s] = $r[$s];
                    }
                }         
            }
            return $resources;
        }
    }
    if (!function_exists('datediff')) {
        /**
         * @param string $interval Can be:
            yyyy - Number of full years
            q - Number of full quarters
            m - Number of full months
            y - Difference between day numbers
            (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The
            datediff is "-32".)
            d - Number of full days
            w - Number of full weekdays
            ww - Number of full weeks
            h - Number of full hours
            n - Number of full minutes
            s   - Number of full seconds (default)
         * @param $datefrom
         * @param $dateto
         * @param bool $using_timestamps
         * @return float|int|string
         * @package googlesitemap
         */
        function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
            if (!$using_timestamps) {
                $datefrom = strtotime($datefrom, 0);
                $dateto = strtotime($dateto, 0);
            }
            $difference = $dateto - $datefrom; /* Difference in seconds */
            switch($interval) {
                case 'yyyy': /* Number of full years */
                    $years_difference = floor($difference / 31536000);
                    if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
                        $years_difference--;
                    }
                    if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
                        $years_difference++;
                    }
                    $datediff = $years_difference;
                    break;
    
                case 'q': /* Number of full quarters */
                    $quarters_difference = floor($difference / 8035200);
                    while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
                        $quarters_difference++;
                    }
                    $quarters_difference--;
                    $datediff = $quarters_difference;
                    break;
    
                case 'm': /* Number of full months */
                    $months_difference = floor($difference / 2678400);
                    while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
                        $months_difference++;
                    }
                    $months_difference--;
                    $datediff = $months_difference;
                    break;
    
                case 'y': /* Difference between day numbers */
                    $datediff = date('z',$dateto) - date('z',$datefrom);
                    break;
    
                case 'd': /* Number of full days */
                    $datediff = floor($difference / 86400);
                    break;
    
                case 'w': /* Number of full weekdays */
                    $days_difference = floor($difference / 86400);
                    $weeks_difference = floor($days_difference / 7); /* Complete weeks */
                    $first_day = date('w', $datefrom);
                    $days_remainder = floor($days_difference % 7);
                    /* Do we have a Saturday or Sunday in the remainder? */
                    $odd_days = $first_day + $days_remainder;
                    if ($odd_days > 7) { /* Sunday */
                        $days_remainder--;
                    }
                    if ($odd_days > 6) { /* Saturday */
                        $days_remainder--;
                    }
                    $datediff = ($weeks_difference * 5) + $days_remainder;
                    break;
    
                case 'ww': /* Number of full weeks */
                    $datediff = floor($difference / 604800);
                    break;
    
                case 'h': /* Number of full hours */
                    $datediff = floor($difference / 3600);
                    break;
    
                case 'n': /* Number of full minutes */
                    $datediff = floor($difference / 60);
                    break;
    
                default: /* Number of full seconds (default) */
                    $datediff = $difference;
                    break;
            }
            return $datediff;
        }
    }
    
                   
    foreach ( $packageNames as $key => $packageName ){
        
        $parentName = $packageName == 'modResource' ? "parent" : "resource_id";
        $select = array('id','alias','editedon','createdon',$parentName);
        if( $packageName != 'modResource' ){
            $modelpath = $modx->getOption('core_path') . 'components/' . $packageName . '/model/';
            $modx->addPackage($packageName, $modelpath);
        }
        else{
            $select = array_merge( $select, array('context_key','isfolder') );
        }   
        
        $where=array( 'published' => 1 );    
        if($config['excludeModResIds'] && $packageName == 'modResource'){
            $ids=array('id:NOT IN' => explode(',',$config['excludeModResIds'] ));
            array_push($where,$ids);
        } 
            if($config['excludeModContIds']&& $packageName == 'modResource'){
            $ids=array('parent:NOT IN' => explode(',',$config['excludeModContIds'] ));
            array_push($where,$ids);
        } 
        $resources = getMapQuery($classNames[$key],$select,$where);
        if(!empty($resources)){
        foreach ( $resources as $resource ){
            if(!empty($resource['alias'])){
                if (!isset($resource['context_key'])) {
                    $resource['context_key'] = !empty( $contexts[$key] ) ? $contexts[$key] : $contexts[0];
                }     
                if ( $resource[$parentName] != 0 ){
                    $url = $modx->makeUrl($resource[$parentName],$resource['context_key'],'','full');
                }
                else{
                    $url = $config['site_url'];
                }
               
                $url .=substr($url, -1)=='/' ? $resource['alias'] : '/'.$resource['alias'];
                $url .= !empty( $resource['isfolder'] ) ? $config['containerSuffix'] : $config['urlSuffix'];
                
                if ($packageName == 'modResource'&& $resource['id']==$config['site_start']){
                    $url=$config['site_url'];
                }
                            
                $date = !empty( $resource['editedon'] ) ? $resource['editedon'] : $resource['createdon'];
                $date = strftime( '%Y-%m-%d', $date );
                $date = date("Y-m-d", strtotime($date));
    
                /* Get the date difference */
                $datediff = datediff("d", $date, date("Y-m-d"));
                if ($datediff <=1) {
                    $priority = '1.0';
                    $update = 'daily';
                } elseif (($datediff >1) && ($datediff<=7)) {
                    $priority = '0.75';
                    $update = 'weekly';
                } elseif (($datediff >7) && ($datediff<=30)) {
                    $priority = '0.50';
                    $update = 'weekly';
                } else {
                    $priority = '0.25';
                    $update = 'monthly';
                }        
    
                $output .= "
                <url>
                    <loc>{$url}</loc>
                    <lastmod>{$date}</lastmod>
                    <priority>{$priority}</priority>
                    <changefreq>{$update}</changefreq>
                </url>";
           }
        }
       }
    }
    unset($key);
    
    $output .= PHP_EOL . "</urlset>";
    
    return $output;```
  • в нем с параметрами все в порядке??
    поставил обновленную версию на скачанный демосайт - выдает пустую страницу, какие бы параметры не ставил туда

  • если вы без параметров вызываете, то в коде лучше заменить часть:

    $config =  array( 
        'packageNames' => 'modResource,shop',
        'classNames' => 'modResource,ShopContent',
        'contexts' => 'web,catalog',
        'site_url'=> $modx->getOption('site_url'),
        'site_start'=> $modx->getOption('site_start', null, 1),
        'excludeModResIds'=>'',
        'excludeModContIds'=>''
    );```
  • хз, не разобрался... вернул старую версию

  • "'contexts' => 'web,catalog',"
    Что за контексты web, catalog????

  • Пустую страницу выдаёт!!!

 

Последние комментарии

  • M

    @Andchir , спасибо. Проблема и правда была в одном из плагинов, который на другом сайте нормально работает

    Читать далее
  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее