• Актуальны ли админ панели на PHP?

    "Все" давно уже делают сайты без программирования - на Тильде или Битриксе (да, другие "все" знают, что Битрикс - [да]вно, но жизнь такова, что первые "все" продолжают его хавать).
    Ещё более другие "все" (те, которые разрабатывают не сайты, а веб-приложения или/и веб-сервисы), как правило, программируют "админки" на том, что лучше знают, или что им больше нравится.
    И эти "все", да, всё чаще делают фронт а-ля SPA, а на бэке остаётся только API.
    Ответ написан
    2 комментария
  • Как создать около 50 поддоменов на Wordpress (Multisite)?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Чем вас мультисайт не устроил? Сайты в сети можно создать программно. Вот пример, создавал так поддомены на все 85 регионов

    $cities = array(
    	'mos' => 'Москва',
    	'spb' => 'Санкт-Петербург',
    	'nsk' => 'Новосибирск',
    	'ekb' => 'Екатеринбург',
    );
    
    $pathinfo = pathinfo(home_url());
    $network_id = get_current_network_id();
    $user_id = get_current_user_id();
    
    foreach ( $cities as $key => $city ) {
    	
    	$site_data = array(
    		'domain' => $key .'.' . $pathinfo['basename'],
    		'path' => '/',
    		'network_id' => $network_id,
    		'user_id' => $user_id,
    		'title' => 'Заголовок сайта ' . $city,
    		'options' => [
    			'blogdescription' => 'Описание сайта ' . $city,
    			'permalink_structure' => '/%category%/%postname%/',
    			'template' => 'twentytwenty',
    			'stylesheet' => 'twentytwenty',
    			'posts_per_page' => '12',
    			'active_plugins' => [
    				'cyr2lat/cyr-to-lat.php',
    				'query-monitor/query-monitor.php',
    				'wordpress-seo/wp-seo.php',
    				'wp-fastest-cache/wpFastestCache.php'
    			]
    		]
    	);
    
    	// вставляем сайт в базу данных
    	$site_id = wp_insert_site( $site_data );
    
    	// пишем ошибку/успех
    	if( is_wp_error( $site_id ) ) {
    		var_dump( 'Ошибка инсерта мультисайта ' . $key . ': ' . $site_id->get_error_message() );
    	} else {
    		var_dump( 'Мультисайт ' . $key . ' опубликован удачно!' );
    	}
    
    } // end foreach $cities


    Можно исхитриться и дублировать контент с главного сайта на поддомены тоже программно
    Ответ написан
    1 комментарий
  • Worker php? что лучше?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Посмотрите на Swoole. PHP, но непривычная демоническая логика ) Постоянно работающие процессы, асинхронная обработка, таймеры. Преимущество в неблокирующей обработке тех же HTTP/WebSocket вызовов. В результате эффективное решение для высокой нагрузки.
    Ответ написан
    Комментировать
  • Worker php? что лучше?

    Sanes
    @Sanes
    в systemd или suvervisor добавьте консольную команду и пусть работает. Либо по расписанию.
    Ответ написан
    Комментировать
  • Я правильно создаю массив?

    @vasiliyshaidiuk
    Чё вы все до пацана докопались.. так и отбивает желание новичкам разбираться в пхп, отправляя учить нудные книги, мда..
    Автор, json_decode по стандарту декодирует строку в так называемый объект, а не массив. Ты же после декодирования работаешь как с массивом, поэтому система и ложится. Чтобы декодировать строку в массив, вторым аргументом добавь 'true', чтобы получилось так: json_decode($peremennaya, true). Вернёт массив, с которым после можешь работать и создавать нужную переменную $workingHoursByDays.✨
    Ответ написан
    1 комментарий
  • Как записывать в файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос, кстати. Сначала ответим на вопрос из заголовка

    file_put_contents($filemame, $somecontent, FILE_APPEND);


    ВСЁ. Это весь код, который нужен, чтобы записать в файл. Одна единственная строчка, без всех этих танцев с саблями.

    А по поводу кода из мануала - это чудовищный, идиотский рудимент из прошлого века, который остался в мануале по недосмотру. Так писать нельзя. Не нужно писать проверки на каждый чих - пхп сам прекрасно сообщит об ошибке. Не нужно заменять четкое и однозначное сообщение об ошибке изложением в свободной форме. И тем более не надо вываливать эти изложения на пользователя сайта. Ему совершенно не интересно читать что у тебя какой то файл не прочитался
    Ответ написан
    3 комментария
  • Как оптимизировать запросы к API?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Использовать RabbitMQ для очереди и Redis в качестве БД.
    Либо делай шардинг, если у тебя реляционная БД типа MSSQL, MySql или PostgreSql
    Ответ написан
    Комментировать
  • Почему не передаётся форма через AJAX в php файл?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы отсылаете запрос с содержимым типа application/json, а принять пытаетесь содержимое типа multipart/form-data (переменная $_POST).
    $json = file_get_contents('php://input');
    $data = json_decode($json, true);
    Ответ написан
    Комментировать
  • Есть ли сообщество начинающих программистов-единомышленников?

    tundramani
    @tundramani
    русскоязычные люди (бывшие советские граждане) не способны создавать сообщества
    это наша национальная черта - мы не умеем совместно жить и работать
    когда-то давно в ссср могли но сдулись и деградировали
    и до ссср в 1917м государство тоже самоубилось как в 1991м

    например здесь на тостере хорошо помогают
    но тут нет нормального полноценного сообщества
    это сообщество индивидуалистов атомизированных

    хорошее сообщество это община, как семья, как родня
    где старшие заботятся о младших, где стимулируют талантливых

    русская общинность исчезла лет 50 назад
    последний рывок был - индустриализация, война и послевоенное строительство
    и всё, люди из общинных патриархальных деревень были переселены в города, и люди разучились жить

    и всё так потому что в современном обществе главное это деньги
    не творчество наука и изобретение и тд
    всё измеряется деньгами
    деньги это высшая ценность
    это культ бабла и потребления в котором человек человеку волк
    люди стали похожи на паразитов пожирающих биосферу

    с другой стороны ты ничем не ограничен - создавай любую социальную платформу и программируй сообщество
    просто большинство людей тупо не понимают как это делать
    некоторые даже скажут - фу! как можно программировать людей!
    да, люди программируются через обучение и воспитание
    и сообщество программируется через идеологию и закон

    это называется социальное программирование

    некоторые считают что нельзя программировать людей и любые идеологии должны быть запрещены - это философия одноклеточных анархистов-либералов-нигилистов-демократов, то есть невежественных атомизированных людей которых теперь большинство
    Ответ написан
    44 комментария
  • Как изменить текст в многих *.docx файлах исходя из имени файла?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Так редактировать docx нельзя, docx это по сути xml в архиве.
    Если я правильно понимаю задачу, то тут нужно использовать это https://www.php.net/manual/ru/function.rename.php
    (Вообще для переименования файлов нужно использовать rename)

    А для чтения и редактирования самого docx файла можно использовать это https://github.com/PHPOffice/PHPWord
    Ответ написан
    2 комментария
  • Как создать свой db.json и получить его по API через axios, по реальному адресу, а не localhost?

    SlavaMaxwell
    @SlavaMaxwell Автор вопроса
    Frontend разработчик
    посоветали так https://my-json-server.typicode.com/ и так
    Vue.prototype.$serverHost =
      process.env.NODE_ENV === "production" ? "" : "http://тут свой сайт";
    Vue.prototype.$templateUrl =
      process.env.NODE_ENV === "production" ? "" : "тут адресс на cms";
    Ответ написан
    3 комментария
  • Как хранить данные не используя сессии?

    DevMan
    @DevMan
    писать, например, в редис. и выставлять время жизни записи.
    Ответ написан
    Комментировать
  • Как правильно разделить компонент, хранилище и API запросы?

    delphinpro
    @delphinpro
    frontend developer
    2. Мнение обратное Alex :
    Я наоборот, предпочитаю все данные хранить в сторе. В компонентах только локальные переменные.
    Все запросы к API расположены в экшенах и соответственно данные сразу кладутся в стор.
    Обращение к стору только через геттеры. В компонент мапятся необходимые экшены и геттеры.

    3. Перехват ошибок удобно делать в перехватчиках (interceptors) Axios. Конфигурируем опцию validateStatus нужным образом и ловим все в одном месте.
    Ответ написан
    2 комментария
  • Как лучше фиксить, если баг в npm пакете thirdparty библиотеки?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Форкнуть, поправить, в зависимостях указать свой форк вместо оригинального пакета.
    Ответ написан
    Комментировать
  • Как верстать с хорошими показателями Google Speed?

    web_Developer_Victor
    @web_Developer_Victor
    Что такое google?
    Вообще способов на 100% удовлетворить LightHouse и PageSpeed нет (Youtube 50%, Google Classroom 57%). Но есть способы, чтобы поднять на 90+
    • Использовать webp изображения в теге picture, для видео webm
    • Не использовать сторонние библиотеки или пару очень маленьких
    • Сжимать все файлы (html, css, js, картинки)


    Если хотите посмотреть "правильную верстку", то вот на React (98%) и "чистая" верстка (90%)
    Ответ написан
    3 комментария
  • Как правильно спроектировать Laravel приложение с уклоном в enterprise?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Главное правило счастливого энтерпрайза - не тащить методики и технологии в которых нет опыта. Если вы не работали на проектах с DDD, не делали своих пет проектов чтобы опробовать подход, то не надо тренироваться на больших проектах.
    Я уже 10 проектов в мире симфони видел и с тремя работал, везде попытки сделать DDD заканчивались невероятной сложностью поддержки после которой даже битрикс не кажется ужасом. 4 дня и изменения в 32 файлах чтобы добавить в список сортировку и фильтрацию... Наверное, можно писать на DDD правильно и с быстрой разработкой и лёгкой поддержкой, но я ещё таких проектов ни сам не создавал, не работал с чужими, не видел в качестве примеров. Поддерживать 10 летний легаси стартанутый на php4 с глобальными переменными гораздо проще чем любую поделку ddd-шников.
    Ответ написан
    Комментировать
  • Как правильно сформировать запрос sql?

    @dzhebrak
    У вас получилась связь "многие-ко-многим" (many-to-many relationship). Это нормальная схема для указанного примера. Здесь вы можете почитать о ней подробнее: https://habr.com/ru/post/193380/

    Данные можно получить, к примеру, следующим образом (tasks_prizes - соединительная таблица):

    SELECT t.id, t.name_task, p.name_prize 
    FROM tasks t
    LEFT JOIN tasks_prizes tp ON t.id = tp.id_task  
    LEFT JOIN prizes p ON p.id = tp.id_prize
    ORDER BY t.id ASC;

    Т.е. left join соединительной таблицы, затем left join призов.

    Результат такого запроса:

    +----+-----------+------------+
    | id | name_task | name_prize |
    +----+-----------+------------+
    |  1 | task #1   | prize #1   |
    |  1 | task #1   | prize #2   |
    |  2 | task #2   | prize #3   |
    |  2 | task #2   | prize #4   |
    |  3 | task #3   | prize #5   |
    +----+-----------+------------+

    По этим данным с помощью php создаете ответ, какой вам необходим. Можно сделать, к примеру, ассоциативный массив, где ключами будут идентификаторы задач, а значением - массив с дополнительной информацией по задаче и ее призами:

    $tasks = [
    	'1' => [
    		'name_task' => 'task #1',
    		'prizes' => [
    			'1' => [
    				'name_prize' => 'prize #1',
    			],
    			'2' => [
    				'name_prize' => 'prize #2',
    			]
    		]
    	]
    ];
    Ответ написан
    Комментировать
  • Как правильно вывести информацию определенной таблицы на всех страницах сайта Laravel?

    Приветствую.
    Сделай так - файле AppServiceProvider в методе boot() напиши:
    view()->composer('*', function($view){
                $view->with('info', TableName::find(1));
            });
    Ответ написан
    Комментировать
  • Vue - как встроенное приложение?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Если не нужна поддержка IE11 и Safari - можно использовать web-компоненты и просто подключать стили внутри компонента - они инкапсулируются, иначе придётся покорячиться.

    Как это сработает с vuetify не скажу, но в похожей ситуации я использовал postcss-prefix-selector, просто добавив с помощью него короткий класс-префикс для всех стилей либы. Соответственно этот класс назначаешь на контейнер с vue и, при удаче, всё заработает.)

    Мне, увы, там ещё кастомный трансформ пришлось добавить для корневых (body, :root и т.п.) селекторов, попатчить саму либу местами и проследить чтобы теперь основные стили сайта не перебивали классы либы, но это уже отдельная история.)

    P.S. Для работы postcss-prefix-selector с vue-cli не обязательно вручную вкорячивать loader, можно его просто добавить в .postcssrc.js в plugins:
    require('postcss-prefix-selector')({
        prefix: '.prefix'
    }),
    Ответ написан
    2 комментария