• Что тут задача фронтенда, а что бэкэнда?

    Newto
    @Newto
    Ваш вопрос похож на вопрос не от технического специалиста, а от клиента, который хочет понять что будет делать технический специалист по его заказу. Если я прав, то бросьте это дело — а именно, не пытайтесь понять что должен сделать верстальщик, а что программист. Вам тут это тысячу раз объяснят, вы поймёте, а потом поймёте, что всё равно не поняли. Если вы сами этим не занимаетесь, то понимание придёт лишь с опытом общения с исполнителями.
    Ответ написан
    Комментировать
  • Где хранить данные для использования их в функциях?

    Newto
    @Newto
    Я не совсем понял вопрос и зачем это нужно, но возможно что-то типа такого вам подойдёт:

    function getInfo(...$vars) {
    	
    	$a = 'какой-то текст';
    	$b = 'что-то из базы';
    	$c = 'что-то из env переменных';
    	//итд
    	
    	
    	foreach($vars[0] as $var_name) {
    		
    		$result[] = $$var_name;
    	}
    	
    	return $result;
    }
    
    
    $result = getInfo(['a','b','c']);
    
    print_r($result);
    ?>

    Вывод:
    Array
    (
        [0] => какой-то текст
        [1] => что-то из базы
        [2] => что-то из env переменных
    )
    Ответ написан
    Комментировать
  • Как реализовать свой зум или дискорд в браузере?

    Newto
    @Newto
    Читайте что такое WebRTC. А далее, быть может, найдете что-то готовое и отвечающее вашим потребностям.
    Ответ написан
    Комментировать
  • Как совместить Node.JS и PHP?

    Newto
    @Newto
    Хоть вопрос и был задан более трёх лет назад, но я таки отвечу, ибо гуглил на днях такую тему и нашёл для себя решение, говоря о связке nodejs+php, может это будет кому-то полезным(а вот питона я не касался).

    Есть такая штука как "child_process"; это подключаемый модуль для nodejs. С его помощью можно настроить серверное приложение, написанное на nodejs, таким образом, что оно будет интерпретировать php скрипты и выводить их результат в браузер. Вот мой, краткий, пример, когда я хочу, что бы index.php интерпретировался через nodejs(а точнее отдавал результат работы php скрипта из консольной команды) и отдавал различные данные в зависимости от переданной GET переменной "page":

    const express = require('express');
    const { exec } = require('child_process');
    const app = express();
    
    app.get('/', function (req, res) {
    
        const page = req.query.page; // Получаем значение параметра 'page' из URL
    
        if (page) {
            // Если значение параметра 'page' передано, передаем его в php скрипт
            exec(`php index.php ${page}`, (error, phpResult, stderr) => {
                if (error) {
                    console.error(`exec error: ${error}`);
                    return;
                }
                res.send(phpResult);
            });
        } else {
            exec('php index.php', (error, phpResult, stderr) => {
                if (error) {
                    console.error(`exec error: ${error}`);
                    return;
                }
                res.send(phpResult);
            });
        }
    });
    
    app.listen(4000, function () {
        console.log('App is listening on port 3000!');
    });


    А в index.php пишем:
    print_r($argv);
    Где массив argv будет содержать переменную page. Соответственно обрабатывайте её и выводите в браузер что хотите в зависимости от результата.

    Таким образом можно "скрестить" php с нодой и творить всякие непотребства. Удачи, дамы и гоcпода! -_^
    Ответ написан
    Комментировать
  • Как отображать данные всем после ajax запроса?

    Newto
    @Newto
    Если я правильно понял задачу, то в хотите сделать что-то типа чата. Когда каждый новый пользователь зашедший на страницу отобразится, допустим, в некоем списке. Эта задача решается ТОЛЬКО по средствам веб-сокетов.

    Однако, можно(но не нужно) сделать и иначе(просто для примера). Без сокетов это выглядело бы так, описываю пошагово:
    1. Пользователь заходит на страницу.
    2. Скрипт, который срабатывает после перезагрузки страницы, отправляет запрос аяксом к скрипту, который записывает id пользователя и время его захода в базу данных.
    3) Еще один скрипт, который "стучит" на бэк раз в, скажем, 5 секунд, обновляет список зашедших по логике "если есть id в базе и запись создана не более чем три минуты назад, то отображать пользователя онлайн". Этот скрипт получает таких пользователей и вы имеете отображаемый список.

    Подчеркну, такой подход имеет смысл только в целях самообучения, ради понимания очерёдности действий. Если же реализовывать его в реальных проектах, то это приведёт к перегрузке используемых серверных ресурсов.
    Ответ написан
    2 комментария
  • Фильтрация по строковому значению?

    Newto
    @Newto
    $a = ["group.phantom", "group.god", "group.imperator", "group.general", "group.hermit", "group.soldier"];
    
    
    $b = [
       [
          "permission" => "group.default" 
       ],
       [
          "permission" => "group.phantom" 
       ], 
       [
          "permission" => "group.hermit" 
       ],
       [
          "permission" => "group.imperator"
       ],
       [
          "permission" => "group.god" 
       ],
    ];
    
    
    function getItem($a, $b) {
    
    	foreach ($a as $item) {
    		
    		foreach ($b as $data_arr => $data) {
    			
    			if ($item == $data['permission'])  return $item;
    		}
    	}
    }
    
    print getItem($a, $b);
    Ответ написан
    Комментировать
  • Как предотвратить перезагрузку страницы?

    Newto
    @Newto Автор вопроса
    Итак, решение вопроса. Все чуточку интересней чем "неумение" дебажить php и vue. Внимательный читатель мог заметить, что я говорил о том, что отправка идёт из vuexy. Так вот в vuexy есть такая штука как Vite, а в Vite уже подключается такая штука как chokidar. При создании/удалении файла, в контексте сборки vuexy+laravel, сhokidar будет обновлять сайт в браузере. Решение -- прописать директорию, куда заливается файл, как неотслеживаемую. Подробнее тут.
    Ответ написан
    Комментировать
  • Программирования учат или применяют?

    Newto
    @Newto
    Добрый день. Я перечитал все ответы выше, а так же комментарии к ним. Решил прокомментировать, с точки зрения своего опыта(я занимаюсь разработкой уже более 15-ти лет). Для удобства чтения я буду писать по пунктам.

    1) Зубрёжка. Каждого из нас, кто ходил в школу, заставляли зубрить таблицу умножения. И, в конце-концов, это помогало в последующем обучении математики, не правда ли? В программировании есть такие же вещи, которые называются "стандарты". Вот эти стандарты и нужно, для начала, зазубрить. А позже и вникнуть, зачем они придуманы.

    2) Методика "объяснение и практика". Вы пишете, что "при таком способе мне приходится одно и тоже глазами несколько раз пробегать чтобы запомнить". Это, с моей точки зрения, в корне не верно. Ибо то, что вам объясняют, не нужно "пробегать глазами" несколько раз, что бы запомнить. Это вообще не нужно запоминать если это не те самые "стандарты"; это нужно осмыслить и понять. После того, как к вам придёт понимание как это работает, зачем и почему это надо -- вы сможете это использовать, осмысленно, в собственном коде.

    3) Платные курсы. Курсы ныне очень разные. Кто-то просто, простите, гребёт бабло на этом всём. А кто-то преподаёт с душой, хорошо и понятно рассказывая. Поэтому платный курс -- это хорошо, но только тогда, простите за тавтологию, когда это хороший курс. Читайте отзывы о курсе, советуйтесь с теми кто его уже прошёл(в идеале) и тогда уже решайте, тот ли этот курс, что даст вам необходимые знания.

    4) ВУЗ. Более 10-ти лет назад, у меня в подчинении, в вебстудии, работал PHP джун. Он доучивался в МГТУ имени Баумана. И он не знал ничего. Совсем. Мне приходилось объяснять ему простейшие вещи, типа что значит иструкция "$a += $b;". Сам же я учился в ВУЗе малоизвестном, на факультете "прикладная информатика в экономике" и наш преподаватель информатики, на первом курсе, на вопрос что значит в коде программы на языке C++ инструкция "с++" ответил, что это "так язык называется". Однако, вскоре ко мне начали ходить сокурсники, с просьбами "а напиши программку". И происходило это потому что я сам загорелся программированием, купил книжки, установил всё что нужно было установить на компьютер и начал "творить волшебство", как это мне тогда виделось, с горящими глазами. Короче говоря не нас учат ВУЗы, а мы учимся в ВУЗах или учимся без них. Тут уж как пойдёт.

    5) Ну и последний, самый важный, с моей точки зрения, пункт. Это Интерес. Если вам интересно программирование, вам нравится разбираться, что-то делать самостоятельно, а не только тогда когда кто-то поставил задачу, то у вас все получится. И как именно это всё учить у вас вопроса, в конце концов, не возникнет. Разбирайтесь, ковыряйте, вникайте и всё будет. Единственное что -- очень желательно, что бы перед вашими глазами были хорошие примеры. Потому что я, в свое время, тоже разбирался, учился и вникал, "гладили по голове", как писали выше в комментариях к одному из ответов, меня уже мои наниматели, потому что я все делал быстро и без ошибок, т.е. работало все так, как было нужно клиентам веб-студии, собеседование в которую я тогда прошел без каких-то проблем. Но вот мой код тогда был, откровенно говоря, тем, что сейчас называется "говнокодом". Потому что некому было мне показать как писать есть хорошо, а как есть плохо.

    Подыдожу -- ключи к быстрейшему развитию в деле разработки это ваш интерес к этому делу, желание им заниматься и примеры хорошего, качественного кода перед глазами. А так же кто-то, кто сможет технически оценить вашу работу и, без агра, с конструктивом, показать и рассказать что вы сделали не так.
    Ответ написан
    25 комментариев
  • Как узнать id созданной записи в bitrix24?

    Newto
    @Newto Автор вопроса
    Для всех, кто попадёт на эту страницу в поисках решения этой проблемы. Я нашёл два решения, которые работают не идеально, но достаточно хорошо при условии не слишком частого обращения к bitrix API.

    Итак, моя задача заключалась в том, что бы получить идентификатор новой записи в определенном поле в системе bitrix24. Далее распишу по шагам. В моём случае всё происходит через PHP, запрос отправляет собственная функция SendQuery. Используется старый синтаксис массивов без квадратных скобок, т.к. легаси, простите меня за это, лень было исправлять. Авторизационные данные зашиты в функции, их я опускаю в данном примере. В общем:

    1) Создаем запись в нужном поле:
    sendQuery('crm.deal.userfield.update', array(
            'id' => $field_id,
            'fields' => array(
                'LIST' => array(
                    array('VALUE' => $name)
                )
            )
        ));


    2) Пишем функцию получения id добавленной записи в поле:

    function get_last_record_id_in_feld($filed_id) {
        
        $r = sendQuery('crm.deal.userfield.get', ['id' => $filed_id]);
        
        $result = $r['result']['LIST'];
    
        foreach($result as $list_data => $col) {
            
            $ids[] = $col['ID'];
        }
        
        sort($ids);
        $last = end($ids);
        
        return $last;
    }


    Тут я получаю список всех значений из поля, куда была сделана новая запись, сортирую массив по значениям, по возрастанию и получаю ID последней записи. Таким образом получаю id новой записи, созданной перед этим, с помощью метода crm.deal.userfield.update.

    Второй способ это создание веб-хука. Битрикс умеет оповещать о внесенном изменении в какое-либо поле по заданному http адресу. Там все то же самое -- получаем от битрикса инфу, парсим, выцепляем последний id из нужного поля.

    Надеюсь, мой ответ кому-то пригодится. Хорошего дня, дамы и господа.
    Ответ написан
    Комментировать
  • Как вызвать код php на всех страницах?

    Newto
    @Newto
    Обычно делается единственная точка входа index.php Все запросы на сайте обрабатываются через этот файл. Таким образом одно включение startup.php в index.php или другом файле, включаемом в index.php, будет действовать на все остальные файлы вашего проекта. Но это работает только при условии правильной архитектуры. Если же у вас проект образца 2000-х готов, когда каждая страница обрабатывается отдельным файлом, то вам ничего не останется кроме того как startup.php включать в каждый файл инклудом отдельно.
    Ответ написан
    Комментировать
  • Функция json_decode не работает пока не вызвать её 2 раза подряд, почему так происходит?

    Newto
    @Newto
    Для решения любой проблемы нужно смотреть в суть этой проблемы. Напишите
    $response = json_decode($response, true);
    var_dump($response);
    $arResult = json_decode($response, true);
    var_dump($arResult);

    Смотрите на результат и делайте выводы.
    Ответ написан
    6 комментариев
  • Как выполнить многомерный index?

    Newto
    @Newto

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

    Newto
    @Newto
    Правило, описанное ответом выше, относится именно к интерфейсам. Т.е. если вы используете интерфейс, то в классе - наследнике интерфейса не должно быть методов, что не описаны в интерфейсе. Но если говорить о случае, когда один класс(не интерфейс) наследует другой, то нет никаких ограничений и это совершенно нормально. К примеру, есть у вас класс "Свет" в котором есть свойства "Включить свет", "Выключить свет" и "Аварийное отключение". И есть три класса - наследника: "Спальня", "Кухня" и "Сигнализация". При этом включать и выключать свет в спальне и на кухне мы можем когда захотим, а вот выключить лампочку, показывающую что работает сигнализация, мы можем только при чрезвычайной ситуации. Таким образом будет совершенно нормально, что классы "Спальня" и "Кухня" будут использовать только методы "Включить свет" и "Выключить свет". А класс "Сигнализация" только "Аварийное отключение". И при этом все они будут наследниками класса "Свет".

    В данном случае важны не принципы и правила, а удобство структурирования кода. В прочем, обычно, все правила с удобством совпадают.
    Ответ написан
  • Что не так в скрипте?

    Newto
    @Newto
    https://codepen.io/Newto/pen/oNybmpO

    Вы просто не обрабатывали все элементы, а обрабатывали только один, первый .content

    upd. А потом вообще изменили так, что перестало что-либо работать :)
    Ответ написан
  • Как настроить кэширование сайта?

    Newto
    @Newto
    <link href="css/index.css?<?= time(); ?>" rel="stylesheet">
    Ответ написан
    1 комментарий
  • Как взять строку из файла с удалением в php?

    Newto
    @Newto
    $file = 'file.txt';
    
    $file_strings_arr = file($file);
    $strings_amount   = sizeof($file_strings_arr);
    $string_for_del   = rand(0, $strings_amount - 1);
    
    print $file_strings_arr[$string_for_del];
    
    unset($file_strings_arr[$string_for_del]);
    file_put_contents($file, implode('', $file_strings_arr));
    Ответ написан
    4 комментария
  • Почему браузер скрывает всё что выше якоря?

    Newto
    @Newto
    Потому что якорь для того и существует, что бы при переходе пользователь увидел тот контент, что помечен якорем (id элемента в HTML). Когда такой элемент где-то наверху страницы, то браузер автоматом скролит страницу до этого элемента. А если внизу, то браузеру просто скролить некуда.
    Ответ написан
    4 комментария
  • Возможно ли скачать не только лендинг а сразу и бекенд сайта?

    Newto
    @Newto
    Ну конечно можно. Звоните владельцу сайта, говорите "алло, дайте мне доступ к вашему серверу". Он вам отвечает - "Да, конечно!" и высылает root ssh доступ. Заходите на сервак и всё скачиваете. А потом еще раз перезваниваете и просите к трубке админа, что бы он вам объяснил как это всё установить, что бы заработало. Profit! :)

    А если серьёзно, то есть в вебе два ключевых значения -- "frontend" и "backend". Вот "frontend" это всё то, к чему имеет доступ, непосредственно, ваш браузер. Это html код, картинки, скрипты(на разных языках) и css стили(про всякие xml и прочее говорить не буду даже). А всё то, что работает с базами данных, делает всякие хитрые операции на СЕРВЕРНОЙ стороне, то есть на БЭКЕ, всегда скрыто от браузера, т.е. от вашего непосредственного доступа. Браузер отображает лишь результат, который БЭК посылает на ФРОНТ, т.е. в ваш браузер с сервера. Поэтому никакими программами (если это не супер-мега-хакерская прилага из для взлома особо слабозащищенных и плохо написанных сайтов) вы бэкенд не скачаете.
    Ответ написан
    Комментировать
  • Как сделать адаптивное поле ввода input?

    Newto
    @Newto
    Input -- никак. Вы правильно заметили, что его имеет смысл расширять только в ширину. Textarea -- и в высоту. Поэтому если вы хотите, что бы в вашем поле было видно все, что там написано и пользователь мог туда что-то написать, то используйте либо textarea, либо div contenteditable=true
    Ответ написан
    2 комментария
  • С каким стеком технологий лучше всего работать на фрилансе?

    Newto
    @Newto
    Лучше всего работать так, как вам этого хочется. Кому-то нравятся офисы и живое общение с коллективом, а кто-то предпочитает работать дома, без лишней суеты. По моему личному мнению лучше начать с офиса, где будут присутствовать более опытные коллеги, таким образом учиться у них будет сподручней. Ну а "заматерев" можно отойти к фрилансу. Что касается технологий, то тут нет очевидных рекомендаций "что изучить". Нужно просто найти спрос, соответствующий вашему уровню знаний.
    Ответ написан