За последние 24 часа нас посетили 17805 программистов и 1686 роботов. Сейчас ищут 905 программистов ...

Всю голову сломал

Тема в разделе "PHP для новичков", создана пользователем sergej_savelev, 29 апр 2017.

  1. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    Ребят, думаю для многих будет интересно узнать, почему данный код не работает:
    PHP:
    1. class api
    2. {
    3.     public function aliasFormat($alias=false){ global $modx;
    4.         if ( !$alias ) $alias = 'novyj';
    5.         else $alias = format::translite($alias);
    6.        
    7.         $q = $modx->db->query('select id from modx_site_content where alias = "'.$alias.'"');
    8.         $c = $modx->db->getRecordCount($q);
    9.        
    10.         if ( $c > 0 ){
    11.            
    12.             $alias = explode('-', $alias);
    13.             $alias_pf = end($alias);
    14.                 if ( is_numeric($alias_pf) ) array_pop($alias); else $alias_pf = false;
    15.                 if ( $alias_pf ) $alias_pf++; else $alias_pf = 1;
    16.             $alias = mb_strtolower(format::translite(implode('-', $alias).'-'.$alias_pf));
    17.            
    18.             self::aliasFormat($alias);
    19.            
    20.         }
    21.        
    22.         return $alias;
    23.        
    24.     }
    25. }
    aliasFormat - это транслитерация и избавление от ненужных символов.

    Если в базе найден alias "novyj", то следующий alias должен быть novyj-1, если и он существует, то, по идее, novyj-2, но на деле что- то мне непонятное происходит, прям таки магическое, и он остаётся novyj-1. Почему?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Niet. Это интересно только для тебя. Не надо этого вот маркетингового псевдоажиотажа и апелляции к множеству. Просто скажи "не понимаю, почему не работает код, помогите". А тебе просто скажут - прикручивай дебаггер и отлаживай пошагово. А ты прикрутишь дебаггер и отладишь. И найдешь причину проблемы. И исправишь ее. И все заработает. И все будут счастливы. И будут жить долго долго и вообще никогда не умрут.
     
    sergej_savelev нравится это.
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Эта функция делает не то, что имел ввиду автор.
     
  4. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    Не беря конечно имеющих столь серьёзных приспособлений на вооружении. Каюсь, преждевременно я себя возвёл в профессионалы) Честно признаться, ни о каком маркетинге и апелляции к множеству и в мыслях не было. Наглядно же всё должно работать и замечание VS как то смутно выглядит.
    --- Добавлено ---
    Может тогда посоветуете как прикрутить дебагер к серверу, к которому не имеется root доступ?
     
  5. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    В итоге я пошёл на поводу той логики, которая мне вскрывала мозг и сделал так как ей было нужно, в итоге у меня получилось нечто работающее как надо:
    PHP:
    1. class api
    2. {
    3.     public function af($alias){ global $modx;
    4.         $q = $modx->db->query('select id from modx_site_content where alias = "'.$alias.'"');
    5.         $c = $modx->db->getRecordCount($q);
    6.  
    7.         if ( $c > 0 ){
    8.            
    9.             $alias = explode('-', $alias);
    10.             $alias_pf = end($alias);
    11.                 if ( is_numeric($alias_pf) ) array_pop($alias); else $alias_pf = false;
    12.                 if ( $alias_pf ) $alias_pf++; else $alias_pf = 1;
    13.             $alias = mb_strtolower(format::translite(implode('-', $alias).'-'.$alias_pf));
    14.            
    15.             $alias = self::af($alias);
    16.            
    17.         }
    18.        
    19.         return $alias;
    20.        
    21.     }
    22.    
    23.     public function aliasFormat($alias=false){ global $modx;
    24.         if ( !$alias ) $alias = 'novyj';
    25.         else $alias = format::translite($alias);
    26.        
    27.         $alias = self::af($alias);
    28.        
    29.         return $alias;
    30.        
    31.     }
    32. }
    Не обессудьте профессионалы!
    --- Добавлено ---
    А не буду исправлять и пытаться сделать красиво вам на зло)
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хочешь сказать, что у тебя нет локального dev-сервера, где бы ты мог развернуть сборку, идентичную удаленной, исходники которой есть на руках? Серьезно? В этом вся проблема? Ты сразу ковыряешь продакшен?
     
  7. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    А ведь ты опять прав)
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Жаль. Потому что неправильный это подход к разработке. Сам себе проблемы делаешь.
     
    sergej_savelev нравится это.
  9. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    Это понятно, там проект такой, что на нём сделать пару вещей и забыть на пол года. Но, всё же, лучше локальную копию иметь и через git изменения отправлять, хоть и малозначительные.
    --- Добавлено ---
    К тому же, совершенствовать систематичный подход будет полезно.
     
    Fell-x27 нравится это.
  10. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1
    Разобрался в phpstorm + xdebug, спасибо! Реально легче дышаться стало)
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Добро пожаловать в мир белых людей :)
     
    Sergey_Tsarev и sergej_savelev нравится это.
  12. sergej_savelev

    sergej_savelev Активный пользователь

    С нами с:
    10 янв 2013
    Сообщения:
    18
    Симпатии:
    1