• Как удалить из строки подстроку с конца до определенного символа?

    delphinpro
    @delphinpro
    frontend developer
    preg_replace('/\s*-\s*\d+[^-]+$/g', '', $str)
    preg_replace('/\s*-\s*\d+[^-]+$/', '', $str)
    Ответ написан
    5 комментариев
  • Как проверить есть ли хоть один символ английского алфавита или цифра?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы написали "Строка состоит только из латинских букв и цифр, минимум один символ".
    "Xотя бы один символ латинского алфавита или цифра" записывается /[a-z0-9]/i
    Ответ написан
    Комментировать
  • Как сделать group by с сохранением некоторым столбцов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Нет. Вы не сможете сделать выборку с произвольным количеством полей.
    Максимум, что тут можно сделать, - свернуть эти поля в JSON.
    SELECT `o`.`num`, `o`.`createdon`, `o`.`cost`, `o`.`status`, `p`.`products`
      FROM `modx_ms2_orders` AS `o`
      LEFT JOIN (
        SELECT `order_id`,
               JSON_ARRAYAGG(
                 JSON_OBJECT('name', `name`, 'price', `price`, 'count', `count`)
               ) AS `products`
          FROM `modx_ms2_order_products` 
          GROUP BY `order_id`
      ) AS `p` ON `p`.`order_id` = `o`.`id`
      WHERE `o`.`user_id` = 106
    Ответ написан
    Комментировать
  • Как сделать group by с сохранением некоторым столбцов?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Простейший варниант - использовать GROUP_CONCAT
    SELECT
        orders.num, orders.createdon, orders.cost, orders.status, 
       GROUP_CONCAT(products.name) prod_names, 
       GROUP_CONCAT(products.count) prod_counts, 
       GROUP_CONCAT(products.cost) prod_costs
    FROM `modx_ms2_orders` AS orders
    JOIN `modx_ms2_order_products` AS products ON orders.id = products.order_id
    WHERE `user_id` = 106
    GROUP BY orders.num, orders.createdon, orders.cost, orders.status
    Ответ написан
    4 комментария
  • Как и на чем реализовать сервер для стриминга видео?

    @KoreanGuy
    лол. Написать video streaming платформу с нуля на вебсокетах. Без обид, но одно это предложение уже говорит о том, что вы не сможете этого сделать. Стриминг не делается на tcp никогда. Вообще мало кто сможет такое сделать, а уж в одного так и подавно. Есть простое правило: если стриминг видео является не основой вашего бизнеса (как, например, у твича, юдеми, и тп), а просто каким-то доп функционалом, ни в коем случае не пишите свой велосипед. Берите vimeo и не усложняйте себе жизнь в 1000 раз.
    Ответ написан
    3 комментария
  • Как разбить json на два массива и вывести каждый как элемент li?

    <ul class="toys"></ul>
    
    <ul class="gifts"></ul>


    function toListElements(jsonStr) { 
      function normalize(str) {
        return str.split(';').map(function(item) {
          return '<li>' + item + '</\li>';
        }).join('');
      }
      
      const jsonObj = JSON.parse(jsonStr);
      
      document.querySelector('.toys').innerHTML = normalize(jsonObj['toys']);
      document.querySelector('.gifts').innerHTML = normalize(jsonObj['gifts']);
    }
    
    toListElements('{"toys":"машинка;кукла;мяч","gifts":"конструктор;набор;мячик;набор"}');
    Ответ написан
    1 комментарий
  • Какие есть эффективные способы защиты формы от ручного спама?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    Прошу прощения, но 5-10 спам-писем в сутки это повод радоваться что Вы всё правильно уже сделали !

    Ну теоретически можно прикрутить проверку текста введённого в форму на "стоп" фразы, но геморройно да и против ручного спама слабо поможет.

    В целом - забейте ибо итак всё хорошо.
    Ответ написан
    3 комментария
  • Как изменить события после первого клика?

    Allegro75
    @Allegro75
    SummaryTables.ru - сайт с футбольной статистикой
    Так а почему не ввести новую переменную?
    Что-то в таком духе:
    let isFirstClick = true;
    
    $(".products-toggle").click(function(e) {
    
     if (isFirstClick) {
            e.preventDefault();
           //первый цикл
            productsRow = $(this).parent().siblings('.products-row');        
             if(productsRow .hasClass("shown")) {
                productsRow .animate({"height": "50px"}).removeClass("shown");
             } else {
                productsRow .animate({"height": "auto"}).addClass("shown");
                animateHeight = productsRow .height();
             } 
    
    isFirstClick = false;
    }
    
     else if (!(isFirstClick)) {
    
            //после первого выполнять это    
             if(productsRow .hasClass("shown")) {
                productsRow .animate({"height": "50px"}).removeClass("shown");
             } else {
                productsRow .animate({"height": animateHeight }).addClass("shown");
             } 
    
    }
    
        });
    Ответ написан
    Комментировать
  • Как изменить события после первого клика?

    @alekcena
    В попытках обрести навыки и умения
    Добавляете data атрибут к элементу.

    Если ничего нет в нём - запуск 1 логики
    Если есть запуск 2й
    Ответ написан
    Комментировать
  • Объясните что значит эта строчка кода?

    @dGololobov
    начинающий
    Разложите код на if-else

    if ($(this).find('input[name="DATA[NAME]"]').val().length < 2 ) {
         return (alert("Введите имя"), !1)
    } else if (0 == IsEmail(t)) {
      return (alert("Введите корректный email"), !1)
    } else {
       return ($.ajax({...тут отправка формы})
    }


    2. !1 -> false
    3. После того как вы разложите все на if-else вы сможете куда вам удобно положить captcha.length
    Ответ написан
    3 комментария
  • Почему Wordpress такой корявый?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Aljo, Не нужно бороться с редактором. Подходов существует множество, все зависит от того, что ты умеешь, чему не прочь научиться, а что делать не планируешь.
    Возьмем как базовый пример например лендинг из 5ти блоков. В одном из блоков слайдер с последними записями блога. В футере и хедере есть номера телефонов и ссылки на соцсети.
    Уже если подумать просто редактора недостаточно, чтобы вывести из админки номера телефонов и соцсети.
    Может быть несколько подходов. Самый простой - использовать плагин для метаполей, я пользую ACF Pro. С помощью него можно сделать страницу настроек и из нее получать номера телефона и социалки и выводить в хедере с футером. Также это можно сделать через API кастомайзера. Это встроенная система настроек. это уже чуть сложнее, но тоже ничего сверхъестественного. Третьим вариантом вижу виджеты. Регистрируем сайдбары где нужно и из виджетов выводим прямо верстку.
    Перейдем к телу лендинга.
    Самый простой способ это если есть готовая верстка создать шаблон страницы для этого лендинга и вкинуть в нее всю верстку. Можно разбить на отдельные файлики для удобства. Контент выводить через те же метаполя.
    Можно поставить конструктор страниц и сделать на нем. Можно попробовать сверстать на встроенном гутенберге, но так как он довольно уныл из коробки нужно будет поставить пару плагинов, расширяющих его возможности.
    Далее как вариант можно делать свои кастомные блоки для гутенберга из готовой верстки.
    Вспоминаем что нам нужно в один из блоков вывести слайдер с последними записями. Тут не обойтись без знаний работы с циклами вордпресс и дальше снова либо код прямо в теле ленда, либо выносим в функцию, либо делаем блок для гутенберга либо смотрим умеет ли установленный нами редактор делать такие штуки.
    И чем глубже, тем интереснее. Кастомные типы записей и таксономий, интеграция сложного меню с помощью класса wp_walker, создание шорткодов и виджетов, плагинов в конце концов. Кароч, желаю удачи
    Ответ написан
    1 комментарий
  • Можно ли написать универсальный обработчик формы ajax+php?

    slo_nik
    @slo_nik Куратор тега PHP
    Вот Вам примитивнейший пример.
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    	<title>Document</title>
    </head>
    <body>
    	<div>
    		<form action="">
    		   <input type="text" name="name">
    		   <input type="text" name="phone">
    		   <input type="hidden" name="first" value="first">
    		   <input type="submit" name="first">
    		</form>		
    	</div>
    	<div>
    		<form action="">
    			<input type="text" name="name">
    			<input type="text" name="email">
    			<input type="hidden" name="second" value="second">
    			<input type="submit" name="second">
    		</form>		
    	</div> 
    	<div>
    		<form action="">
    			<input type="text" name="name">
    			<textarea name="textarea"></textarea>
                <input type="hidden" name="third" value="third">
    			<input type="submit" name="third">
    		</form>		
    	</div>	
    <script type="text/javascript">
    	$(document).ready(function(){
    		$("form").on("submit", function(e){
    			e.preventDefault()
    			var data = $(this).serialize()
    			$.ajax({
    				url: 'ajax.php',
    				method: 'POST',
    				data: data,
    				success: function(response){
    					console.log(response)
    					var answer = jQuery.parseJSON(response);
    					if(answer.type === 'success'){
    						alert(answer.text)
    					}
    					if(answer.type === 'error'){
    						alert(answer.text)
    					}
    				} 
    			}) 
    		})
    	})
    </script>	
    </body>
    </html>


    <?php
      if(isset($_POST)){
    
      	if(isset($_POST['first'])){
      		if(!empty($_POST['name'])){
      			$answer = ['type' => 'success', 'text' => 'Отправлена форма First'];
      		}else{
      			$answer = ['type' => 'error', 'text' => 'Заполните поле "name" в форме First'];
      		}	
      	}
      	if(isset($_POST['second'])){
      		$answer = ['type' => 'success', 'text' => 'Отправлена форма Second'];
      	}
      	if(isset($_POST['third'])){
      		$answer = ['type' => 'success', 'text' => 'Отправлена форма Third'];
      	} 
      	echo json_encode($answer);
      }
    ?>
    Ответ написан
    Комментировать
  • Изменение цвета текста в зависимости от цвета блока под ним?

    thisuserhatephp
    @thisuserhatephp
    Ужастнее холокоста может быть только wordpress
    mix-blend-mode
    https://jsfiddle.net/b12Lqz05/

    Но я бы на js сделал, на css не получится полностью рабочий вариант сделать, в примере выше например видно
    Ответ написан
    2 комментария
  • Изменение цвета текста в зависимости от цвета блока под ним?

    spooosh
    @spooosh
    Frontend-разработчик
    Привет, попробуй свойство mix-blend-mode, если не подойдет, то только на JS логику писать.
    Ответ написан
    1 комментарий
  • Как сделать такой select в форме?

    SlavaMaxwell
    @SlavaMaxwell
    HTML-верстальщик
    Спозиционируй блок с товарами и через top прижми к блоку со стрелкой, а чтобы он имел эффект выпадения, нужно прописать скрипт, который рассчитает высоту блока с товарами, а самому блоку с товарами по дэфолту в стилях задать ovevrflow: hidden; height: 0; попробуй
    Вот этот скрипт https://www.w3schools.com/howto/tryit.asp?filename...
    Класс panel и будет являться блоком с товарами
    Ответ написан
    Комментировать
  • Какой порт можно использовать вместо 21 для ftp?

    CityCat4
    @CityCat4
    Если я чешу в затылке - не беда!
    Проблема в том, что FTP данный либо высоконагруженный либо просто так настроен, что рвет соединение по 20 сек неактивности. Здесь ничего нельзя поделать (ну только если Вы не админ этого сервера - тогда увеличить таймаут на неактивность :) ).
    Ответ написан
    Комментировать
  • Какой порт можно использовать вместо 21 для ftp?

    vabka
    @vabka
    Токсичный шарпист
    Ошибка: Соединение прервано после 20 секунд неактивности

    В этом и ошибка. Так видимо настроен сервер.
    Ответ написан
    4 комментария
  • Как убрать наследование от display flex?

    DanArst
    @DanArst
    Э, Ойboy!
    Потому что по умолчанию для свойства align-items выставлено значение stretch
    , которое означает что дочерние элементы flex-контейнера заполняют всю его высоту.

    Укажите для flex-контейнера свойство align-items с любым другим значением (flex-start, center, flex-end) и будет вам нулевая высота
    Ответ написан
    Комментировать
  • Как в Woocommerce вывести доп.информацию о категории при наведении?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Не уверен, что выйдет через стандартное меню. Даже не знаю, можно ли подобный волкер написать. Хотя можно и попробовать. Я вижу пару вариантов.
    Плагины типа мега-меню это первый.
    Второй это вывести рядом с меню скрытые блоки, в которые вытащить описания категорий с картинками, скрыть их. К нужным пунктам меню добавить классы, от которых плясать открытие блоков с описанием.

    <?php 
    
    $prod_cat_args = array(
    	'taxonomy'    => 'product_cat',
    	'hide_empty'  => false,
    	'parent'      => 0 
    );
    
    $woo_categories = get_categories( $prod_cat_args );
    
    ?>
    
    <?php foreach ( $woo_categories as $woo_cat ) : 
    	$woo_cat_id = $woo_cat->term_id;
    	$woo_cat_name = $woo_cat->name;
    	$woo_cat_slug = $woo_cat->slug;
    	$woo_cat_descr = $woo_cat->description;
    	$category_thumbnail_id = get_term_meta($woo_cat_id, 'thumbnail_id', true);
    	$thumbnail_image_url = wp_get_attachment_url($category_thumbnail_id);
    	$cat_link = get_term_link( $woo_cat_id, 'product_cat' );
    	?>
    	<div class="product-cat-item">
    		<a href="<?php echo $cat_link ?>"><?php echo $woo_cat_name ?></a>
    		<?php if ($thumbnail_image_url) : ?>
    			<img src="<?php echo $thumbnail_image_url ?>" alt="<?php echo $woo_cat_name ?>">
    		<?php endif; ?>
    		<p><?php echo $woo_cat_descr ?></p>
    	</div>
    
    <?php endforeach; ?>
    Ответ написан
    6 комментариев