Ответы пользователя по тегу PHP
  • Как правильно писать обертку pdo?

    65536
    @65536
    Мне очень нравится https://github.com/laravel/framework/tree/5.0/src/... хоть и очень много жрет, синтаксис краткий и человеческий

    легко вырезается и вставляется в свой проект

    сами будете делать 5 лет
    Ответ написан
    Комментировать
  • На каком языке писать комментарии в коде?

    65536
    @65536
    Присоединяюсь к вопросу. Только беспокоит другое, написать можно и на обоих. А вот реально ли на гитхабе или просто у себя где-то в гите держать параллельно 2 версии, где код идентичен, а комменты на русском. Вот хочу я залить одну прогу на гитхаб и чтобы охват был от русских чайников до всех остальных, но походу постоянно следить за этим будет невозможно, мержить построчно каждый файл и вообще непонятная история будет складываться как минимум в одной репе, а то и в обеих. Единственное, что пока пришло в голову это каждому методу давать номер типа #2743 и чтобы был скрипт, который бы скачал и вставил комменты в нужные места. Можно было бы совместить енг и номерки для дорогих россиян чтобы они могли скачать себе великие и могучие комменты, но это прокатит только для комментов перед методами, а внутри методов тоже бывают. Кто что думает?
    Ответ написан
  • Хорошая практика? Хранение данных ... json?

    65536
    @65536
    а зачем? по-моему тут самое место для применения реляционного принципа хранения. я делал магаз, 100к товаров, у каждого по 30-50 параметров, все летает. за целостностью бд следить не нужно руками. а так вы получается микросубд делаете, индекс какой-то свой. это гемарой и потом внезапно развалятся данные и быстро будет не починить.

    gyazo.com/e27e934b9bf1c2431a7fbf9db9c501f4 вот такая схема. товары и свойства принадлежат категориям. значения свойств тусуются на их связях с товарами.

    ваш вариант тоже реализуем. только ради чего?

    по скорости я вам точно могу сказать что все это быстро работает. слегка возрастает нагрузка в зависимости от числа параметров входящих в запрос (отмеченных галочек, слайдеров и тд). от количества товаров вообще не зависит, тестили на 600к
    Ответ написан
  • Drop-down menu через php??

    65536
    @65536
    <?php
    
    $menu = array(
        array('label' => 'Главная', 'link' => '1'),
        array('label' => 'О нас', 'link' => '2'),
        array('label' => 'Наши блюда', 'link' => '3'),
        array('label' => 'Заказать', 'link' => '4')
    );
    
    $dropmenu = array(
        array('label1' => 'Пицца', 'link1' => '1'),
        array('label1' => 'Лазанья', 'link1' => '2'),
        array('label1' => 'Блинчики', 'link1' => '3')
    );
    
    foreach ($menu as $value)
    {
        echo "<li><a href=\"../index.php?id={$value['link']}\"><strong>{$value['label']}</strong></a></li>";
    
         if ($value['link'] == 3)
         {
             foreach ($dropmenu as $value1) {
             echo "<li><a href=\"../index.php?id={$value1['link1']}\"><strong>{$value1['label1']}</strong></a></li>";
         }
    }
    
    $page = 1;
    $page = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
    Ответ написан
    1 комментарий
  • Как сделать ЧПУ на php?

    65536
    @65536
    оффтоп. Мужики, кого-нибудь еще switch раздражает как меня?
    Ответ написан
    8 комментариев
  • Как получить номер телефона с картинки на php?

    65536
    @65536
    Ответ написан
    Комментировать
  • Как убрать лишние директории из url???

    65536
    @65536
    .htaccess
    RewriteEngine on
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.php?uri=$1 [L]


    index.php
    <?php
    
    ...
    
    $uri = explode('/', $_REQUEST['uri']);
    
    if ( $uri[0] == 'fer' )
    {
        print file_get_contents('wer/fer/index.html');
    }
    
    ...
    Ответ написан
  • Как правильнее парсить результаты ajax запроса?

    65536
    @65536
    я делаю так. все состоит из блоков, где каждый блок это какое-то хтмл, к которому прилагается свой джаваскрипт, который на этот блок лично навешивает всякие обработчики. есть два случая: загрузка страницы целиком (то есть всех блоков со всеми своими джаваскриптами) и перезагрузка отдельных блоков в фоновом режиме (аджаксом так называемым). в первом случае собственно загружается страница и по готовности отрабатывают все скрипты, которые прилагаются к блокам из которых она состоит. во втором блок загружается на страницу (вставляется в нужное место, реплейсится, аппендится или еще как) и опять же отрабатывают его скрипты (именно его а не все). если в этих скриптах есть биндинги событий, то их сначала нужно отбиндить, потому что блок может перезагружаться сколько угодно раз и с каждым разом события будут навешиваться повторно и нажатие на кнопку будет слать не один запрос а столько сколько раз был перезагружен блок. никогда не было доверия ко всяким .on() .live() и тд. проще и надежнее заменить кусок кода на странице и заребиндить все что его касается.

    дополнительное преимущество такое, что вся логика происходит на стороне пхп, а на стороне браузера только работа с домом, никаких вычислений, ну либо только такие, которые не будут теряться после перезагрузки блока или заставлять писать одно и то же 2 раза. только простые манипуляции и отработка событий которые будут сообщать серверу об изменениях. например, какая-нибудь форма отправки заказа, сколько ужаса я повидал, когда условия доставки рассчитываются на странице джаваскриптом а потом это отправляется на сервер (то есть я могу подменить стоимость в запросе) или на сервере подобный алгоритм считает все это еще раз чтоб типа проверить, в результате имеется зеркало алгоритма на другом языке и что-то менять нужно в 2 местах ломая голову. или жмем случайно ф5 и все слетает потому что о данных в полях кроме страницы никто не знал. как правильно в данном случае (имхо конечно же), допустим форма такая, 2 поля имя и телефон и один переключатель доставка/самовывоз. делаем для нее в сессии массив которых способен хранить состояние этих полей и переключателя, задаем дефолтные значения там же. при загрузке страницы с этой формой она просто выводится со значениями которые находятся в сессии. к ней прилагается джаваскрипт который ребиндит событие кейап на полях и событие клик на переключателе. по событию кейап отправляется значение поля чтоб сохранить его в сессии (в ответ ничего не происходит, здесь не нужно). по клику на переключателе так же шлется запрос который меняет в сессии его состояние и в ответ перезагружается вся форма (на основании актуальных данных в сессии) и все на ней заново ребиндится. не знаю смог ли объяснить, короче проще всего отправлять каждый пук пользователя на сервер, обработать его там, и перезагрузить нафиг всё на что он мог повлиять.

    все эти килобайты и миллисекунды полная ерунда, все споры на эту тему это отстаивание своих знаний определенных технологий. как по мне если программа на пхп то вся логика в пхп и должна происходить а джс только обслуживать интерфейс и не более того
    Ответ написан
  • Не открывается сайт на локальном сервере?

    65536
    @65536
    может там чего напишут cat /opt/lampp/logs/error_log
    Ответ написан
    Комментировать
  • Что Вы думаете о ресурсе для разработчиков инди-игр?

    65536
    @65536
    А вы напишите ТЗ с полной раскадровкой всей логики вашего мегапортала со всеми кнопками и экранами. Представьте сколько это займет времени, умножьте на 5, а потом еще прикиньте хватит ли у вас денег/энтузиазма и у вашего непонятного компаньона.
    Ответ написан
    3 комментария
  • Как защитить файл, с serialize содержимым?

    65536
    @65536
    внешнего вмешательства откуда? если по хттп, то положить в папку рядом с ним .htaccess с содержимим Deny From All
    Ответ написан
    Комментировать
  • Как создать видеохостинг с нуля?

    65536
    @65536
    делайте на битриксе там есть инфоблоки вставляете видео в блок и зовете посетителей
    Ответ написан
    Комментировать
  • В чем ошибка php кода?

    65536
    @65536
    во всём
    Ответ написан
    Комментировать
  • Как склонять слова по падежам в PHP?

    65536
    @65536
    Вот дарю отполированную функцию
    function ending($number, $one, $two, $five)
    {
        $number = $number % 100;
    
        if ( ($number > 4 && $number < 21) || $number == 0 )
        {
            $ending = $five;
        }
        else
        {
            $last_digit = substr($number, -1);
    
            if ( $last_digit > 1 && $last_digit < 5 )
                $ending = $two;
            elseif ( $last_digit == 1 )
                $ending = $one;
            else
                $ending = $five;
        }
    
        return $ending;
    }

    На вход даем число, и отвечаем на вопросы один, два, пять. Если это товары, то:
    'Товар' . ending($number, '', 'а', 'ов')

    Не обязательно окончания, можно и полные слова, а есть случаи когда это необходимо, например
    ending($years, 'год', 'года', 'лет')
    Ответ написан
    1 комментарий
  • Как в элоквенте выбирать подключения на ходу?

    65536
    @65536 Автор вопроса
    Если кому вдруг интересно, решил следующим образом. В самом элоквенте такой возможности нет, поэтому пришлось накостылить. Вообще логично, что если я указал для модели соединение, то и связи должны браться с того же соединения, а не с дефолтного. Не могут же быть таблицы одной бд связаны с таблицами другой (причем дефолтной, указать то нельзя)

    Вот что пришлось добавить (4-й элоквент):
    1.
    public function newQuery()
    {
        // + вот это {
        list(, $caller) = debug_backtrace(true, 2);
    
        $connection = null;
        if ( isset($caller['object']) && $caller['object'] instanceof self)
            $connection = $caller['object']->connection;
        // }
    
        $builder = $this->newEloquentBuilder(
            $this->newBaseQueryBuilder($connection) // + аргумент $connection
        );
    
        $builder->setModel($this)->with($this->with);
    
        return $this->applyGlobalScopes($builder);
    }

    2.
    protected function newBaseQueryBuilder($connection = null) // + аргумент
    {
        $conn = $this->getConnection($connection); // + аргумент
    
        $grammar = $conn->getQueryGrammar();
    
        return new QueryBuilder($conn, $grammar, $conn->getPostProcessor());
    }

    3.
    public function getConnection($connection = null) // + аргумент
    {
        // + вот это {
        if ( $connection )
            $this->setConnection($connection);
        // }
    
        return static::resolveConnection($this->connection);
    }


    Всё работает, теоретически нигде не должны мешать эти добавления
    Ответ написан
    Комментировать
  • Почему появились символы �? на сайте?

    65536
    @65536
    Ответ написан
    Комментировать
  • Система для управления таблицами MySQL для Modx Evo?

    65536
    @65536
    www.adminer.org

    для редактирования данных онлайн самое то. пхпмайадмин это разве что для администрирования
    Ответ написан
    Комментировать