Крот

Крот

Никакой код не может быть быстрее, чем отсутствие кода.
+459
Репутация
6376
Рейтинг
0
Крот Крот Исправляем ошибку меню для ссылок из url_rewrite.php. Хак. 12 лет назад
для 1.9 надо
функция detectorMenuURI() - на самом деле это просто подправленная копия detectURI - сделано для ускорения работы
можно использовать оригинальный detectURI - но тогда при каждом клике будет пересчитываться список uri
соотв-но при изменении списка в custom_rewrite нужно как-то сбрасывать закэшированное значение

Код PHP:
 private function detectorMenuURI($muri){

     $uri    = $muri;
     $uri    = ltrim($uri, '/');
     $rules  = array();

     $folder = rtrim($uri, '/');

if (strstr($uri, "?") && !preg_match('/^admin\/(.*)/i', $uri) && !strstr($uri, 'go/url=')){
            $query_str = substr($uri, strpos($uri, "?")+1);
            $uri = substr($uri, 0, strpos($uri, "?"));
            parse_str($query_str, $temp_request);
			$_REQUEST = array_merge($_REQUEST, $temp_request);
        }

        if (in_array($folder, array('admin', 'install', 'migrate', 'index.php'))) { return; }
     
        //специальный хак для поиска по сайту, для совместимости со старыми шаблонами
        if (strstr($_SERVER['QUERY_STRING'], 'view=search')){ $uri = 'search'; }

if (!$this->rules) {
       if(file_exists(PATH.'/url_rewrite.php')) {
           //подключаем список rewrite-правил
            self::includeFile('url_rewrite.php');
            if(function_exists('rewrite_rules')){
                //получаем правила
                $rules = rewrite_rules();
            }
        }

        if(file_exists(PATH.'/custom_rewrite.php')) {
            //подключаем список пользовательских rewrite-правил
            self::includeFile('custom_rewrite.php');
            if(function_exists('custom_rewrite_rules')){
                //добавляем к полученным ранее правилам пользовательские
                $rules = array_merge($rules, custom_rewrite_rules());
            }
        }
        if ($rules){  $this->rules=$rules;}
     }
     else {
       $rules=$this->rules;
     }

     $found = false;

     if ($rules){

         //перебираем правила
         foreach($rules as $rule_id=>$rule) {

             //небольшая валидация правила
             if (!$rule['source'] || !$rule['target'] || !$rule['action']) { continue; }
             //проверяем совпадение выражения source с текущим uri
             if (preg_match($rule['source'], $uri, $matches)){
                 //перебираем совпавшие сегменты и добавляем их в target
                 //чтобы сохранить параметры из $uri в новом адресе
                 foreach($matches as $key=>$value){
                     if (!$key) { continue; }
                     if (strstr($rule['target'], '{'.$key.'}')){
                         $rule['target'] = str_replace('{'.$key.'}', $value, $rule['target']);
                     }
                 }

                 //действие по-умолчанию: rewrite
                 if (!$rule['action']) { $rule['action'] = 'rewrite'; }

                 //выполняем действие
                 switch($rule['action']){
                     case 'rewrite'      : $uri = $rule['target']; $found = true; break;
                     case 'redirect'     : $this->redirect($rule['target']); break;
                     case 'redirect-301' : $this->redirect($rule['target'], '301'); break;
                        case 'alias'        : self::includeFile($rule['target']); $this->halt();break;
                 }

             }

             if ($found) { break; }

         }
     }

     return $uri;
     
 }
menuID
Код PHP:
    public function menuId(){

        //если menu_id был определен ранее, то вернем и выйдем
        if ($this->menu_id) { return $this->menu_id; }

        $view       = self::request('view', 'str', '');
        
        if ($this->is_content){
            $uri = substr($this->uri, strlen('content/'));
        } else {
            $uri = $this->uri;
        }

        $uri        = '/'.$uri;

        //флаг, показывающий было совпадение URI и ссылки пунта меню
        //полным или частичным
        $is_strict  = false;

        //главная страница?
        $menuid     = ($uri == '/' ? 1 : 0);
        if ($menuid == 1) {
            $this->is_menu_id_strict = 1;
            return $menuid;
        }

        //перевернем массив меню чтобы перебирать от последнего пункта к первому
        $menu = array_reverse($this->menu_struct);

        //перебираем меню в поисках текущего пункта
        foreach($menu as $item){

            if (!$item['link']) { continue; }

			// uri с учетом имени хоста
			$full_uri = HOST . $uri;

            //полное совпадение ссылки и адреса?
            if ($uri == $item['link'] || $full_uri == $item['link']){
                $menuid = $item['id'];
                $is_strict = true; //полное совпадение
                break;
            }

////////////////  Определяем правильную ссылку для пункта меню
            if ($uri == $item['realink']){
                $menuid = $item['id'];
                $is_strict = true; //полное совпадение
                break;
            }

            //частичное совпадение ссылки и адреса (по началу строки)?
            $uri_first_part = substr($uri, 0, strlen($item['link']));
            if ($uri_first_part == $item['link']){
                $menuid = $item['id'];
                break;
            }
////////////////  Определяем правильную ссылку для пункта меню  /////////////
            //частичное совпадение ссылки и адреса (по началу строки)?
            $uri_first_part = substr($uri, 0, strlen($item['realink']));
            if ($uri_first_part == $item['realink']){
                $menuid = $item['id'];
                break;
            }
           
        }

        $this->menu_id              = $menuid;
        $this->is_menu_id_strict    = $is_strict;

        return $menuid;

    }
сравните со своим cms.php
+3
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
скоро будет новая версия, в ней -

1) два разных способа запуска демона отправки, запрет запуска второй копии демона
2) контроль работы демона с сайта + перезапуск по крону если помер - соотв-но улучшена надежность работы
3) процесс "спячки" делится на небольшие части, чтбы можно быстро остановить демон
это уже есть
плюс доделываются
4) отправка в ЛС
4а) отправка на емайл пользователям сайта
5) фильтр пользователей сайта (давно не заходил, мужч, жен., по группе, дата рожд. )
0
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
добился стабильности процесса отправки - время активной работы процесса - 7 суток (это без контроля отвала процесса)
0
Крот Крот Исправляем ошибку меню для ссылок из url_rewrite.php. Хак. 12 лет назад
поправил функцию loadMenuStruct - была небольшая ошибка... если кто поставил, проверьте
0
0
Крот Крот Исправляем ошибку меню для ссылок из url_rewrite.php. Хак. 12 лет назад
не могу сказать, я еще не смотрел SEO компонент, может просто совпало так))
+1
Крот Крот Исправляем ошибку меню для ссылок из url_rewrite.php. Хак. 12 лет назад
здесь очень много желающих чтобы ссылка до какого-либо объекта в каком-либо компоненте была не
http://сайт.ру/категория1/категория2/категория3/.../объект.html
а просто
http://сайт.ру/категория/объект.html вне зависимости от вложенности
это просто пример, через custom_rewrite много интересного сделать можно
0
Крот Крот Компонент и плагин "SEO pages" 12 лет назад
плюсанул, посмотрю обязательно)
0
Крот Крот Замена sendmail для Denwer 12 лет назад
а подскажите, чем грамотно настроенные части Денвера: апач, пхп и mysql и к тому же закрытые фаейрволом отличаются от тех же самых по отдельности?
+1
Крот Крот Активная ссылка в шапке модуля. Хак. 12 лет назад
предлагаю сделать это в оффрелизе (или в сервиспаке на него) smile
а потом, когда выйдет релиз с данной функцией, я просто уберу это из своего шаблона

ИМХО чем меньше вмешательства в систему, тем проще
+4
Крот Крот Активная ссылка в шапке модуля. Хак. 12 лет назад
надо тему сделать на форуме - что нужно добавить в офф.релиз из того что сделано
там будет проще чем в блогах выбрать что нужно, даже если разработчики не включат в оффрелиз
+1
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
Спасибо за поддержку, сейчас закончу проекты с сайтами, продолжу работу над компонентом
+4
Крот Крот Личные записки. ver. 1.2 + Плагин. 12 лет назад
еще бы отправку почты(ЛС) по таймеру на майл.ру + уведомление на сотовый = вот и готов будильник или напоминальник smile
+1
Крот Крот Авторизация в окне в стиле Apple. 3D transform + CSS3. Хак. 12 лет назад
потому что это адаптация скрипта под InstantCMS. Мне он очень глянулся, поэтому и адаптировал его... как уже писал выше, картинки не переводил, кто захочет, сделает сам любой дизайн и текст, главное идея
+1
Крот Крот Авторизация в окне в стиле Apple. 3D transform + CSS3. Хак. 12 лет назад
тут нужен только красивый дизайн - а прикрутить можно все что угодно
0
Крот Крот Авторизация в окне в стиле Apple. 3D transform + CSS3. Хак. 12 лет назад
это мне было лень ставить на место галочку "Запомнить меня")))
0
Крот Крот Авторизация в окне в стиле Apple. 3D transform + CSS3. Хак. 12 лет назад
самому понравилось... думаю для версий сайта под айфон можно покрутить или для сайта хипстеров smile
0
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
извините, номер был неправильно мной введен... исправил
0
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
кстати попробовал собрать с своего сайта сделанного на Инстанте - собирает несмотря на включенный фильтр почтовых адресов
0
Крот Крот Компонент Инвайтер - спам рассылки 12 лет назад
знаю про год smile мне на региональный сайт "пойдет" собрать новых клиентов - раньше то же самое руками собирал
и тогда прирост пользователей был ощутимый
сейчас быстрее будет )

все от целей зависит
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.