• Как сделать печать invoice?

    @choupa
    Архитектор (обычный, который строит)
    Сделать pdf совсем не сложно. Может быть я отстал от жизни, но как поставил себе в 2011 году PHP-библиотеку mpdf с тех пор и не парюсь. Суть в том, что формируете обычное HTML-содержимое, как если бы это была страница, но не выводите его с помощью ECHO в браузер, а сначала одной функцией превращаете его в PDF-файл, который отправляется клиенту. Делов-то. Выглядит это буквально вот так:

    require ('mpdf.php');
    	
    	$pdf = new mPDF('utf-8', 'A4');		
    	$pdf->charset_in = 'cp1251';
    	$style = file_get_contents('style.css');
    	$pdf->WriteHTML($style, 1);
    	
    	$html = " .... ";   // Сюда пишите ваш <body>...</body>
    	
    	$pdf->WriteHTML($html, 2);
    	$pdf->Output();
    Ответ написан
  • Как указать в @include поддомены?

    @choupa Автор вопроса
    Архитектор (обычный, который строит)
    Решено:
    // @include https://leroymerlin.ru/*
    // @include https://*.leroymerlin.ru/*
    Ответ написан
    Комментировать
  • Как правильно вывести ассоциативный массив в 2 ряда по 3 элемента?

    @choupa
    Архитектор (обычный, который строит)
    Использовать ассоциативный массив, чтобы дать ключам имена Country_1, Country_2, ... нет никакого смысла. Тогда уж их можно просто пронумеровать. Подозреваю, что от вас хотят чего-то такого:
    $contry_data[ 0 ] = array( 'country' => 'Украина', 'population' => 46, 'capital' => 'Киев' );
    $contry_data[ 1 ] = array( 'country' => 'Нидерланды', 'population' => 17.02, 'capital' => 'Амстердам' );
    $contry_data[ 2 ] = array( 'country' => 'Норвегия', 'population' => 5.233, 'capital' => 'Осло' );

    Ну или правильнее даже так:
    $contry_data = array (
        'Украина' => array (  'population' => 46, 'capital' => 'Киев' ),
        'Нидерланды' => array (  'population' => 17.02, 'capital' => 'Амстердам' ),
        'Норвегия' => array (  'population' => 5.233, 'capital' => 'Осло' ),
    );


    У вас 3 типа данных (название страны, население, столица) и 3 элемента данных (Украина, Нидерланды и Норвегия). Не понятно, о каких таблицах хоть 2х3, хоть 3х2 идёт речь. Тут как ни поверни, получается 3х3.

    echo "<table><tr><th>страна</th><th>население</th><th>столица</th></tr>";
    foreach ( $contry_data as $country => $data )  {
        echo "<tr><td>".$country."</td>";
        foreach ( $data as $key => $value )
            echo "<td>".$value."</td>";
        echo "</tr>";
    }
    echo "<table>";


    Ну а для транспонированного вида я ничего лучше не придумал:
    echo "<table><tr><td>страна</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$country."</td>";
    echo "</tr><tr><td>население</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$data[ 'population' ]."</td>";
    echo "</tr><tr><td>столица</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$data[ 'capital' ]."</td>";
    echo "</tr><table>";
    Ответ написан
    3 комментария
  • Как правильно устанавливать одинарные кавычки в data атрибуте?

    @choupa
    Архитектор (обычный, который строит)
    Заэкранируйте апостров в Golf\'s. А где надо, разэкранируйте назад.
    Ответ написан
    2 комментария
  • 3D рендер в WEB?

    @choupa
    Архитектор (обычный, который строит)
    Дополню Максим Тимофеев. Если картинки статичные или квазистатичные (цикличная анимация или известное перемещение камер по ограниченным позициям, например, обзор автомобиля 360 градусов), то надо заранее обсчитывать кадры с хорошим качеством в нормальных пакетах типа 3dsmax или blender, выдавая на клиент готовые png, возможно, послойно с прозрачностями.

    Раньше я делал такое: обход здания по кругу с плавной заранее отрендеренной раскадровкой через 5 градусов (4-5 часов предварительного рендера в средненьком качестве). Где-то лежит в архиве, но это ещё даже на flash делалось.

    Рендерить в браузере имеет смысл только истинно динамические изменяемые сцены или при сложном управлении камерой со стороны пользователя. Сейчас я пользуюсь three.js. При этом важно понимать, что высокого качества и фотореалистичности, сравнимых с тем же 3dsmax, от рендера на javascript, ждать не стоит. Для схематичной графики или абстрактных миров сойдёт, но не более.

    Ну и как можно догадаться, динамически рендерить на стороне сервера нельзя в принципе из-за лагов. Только на клиенте.
    Ответ написан
    Комментировать
  • Как узнать процент оставшего времени?

    @choupa
    Архитектор (обычный, который строит)
    У меня разрыв шаблона. Неужели человек с таким знанием арифметики программирует на PHP?!

    $interval = $end_time - $start_time;
    $time = time() - $start_time;
    echo "прошло: ".round( 100 * $time / $interval )."%<br>";
    echo "осталось: ".round( 100 - 100 * $time / $interval )."%<br>";
    Ответ написан
    Комментировать
  • Как сделать отсчет скролла от контейнера в JS?

    @choupa
    Архитектор (обычный, который строит)
    Вычитайте offsetTop указанного элемента.
    Ответ написан
    Комментировать
  • Как извлечь число из строки по шаблону?

    @choupa
    Архитектор (обычный, который строит)
    /*\[LKMSG-(\d+)\]*/
    Ответ написан
    Комментировать
  • Как решить пример?

    @choupa
    Архитектор (обычный, который строит)
    Выполняет любые вычисления для нескольких действий целыми числами и числами с точкой без скобок. Можно усложнить, добавив десятичную точку. Если хотите добавить скобки, то надо уже заморачиваться, регулярные выражения уже не подойдут, вернее можно и с ними, но уже будет черезчур навороченно.

    <input onchange = "if (/-*\d+\.?\d*(\s*[\+-\/\*]\s*\d+\.?\d*)/.test(this.value)) alert(eval(this.value))">
    Ответ написан
    Комментировать
  • Как при клике на элемент, всем элементам с этим же классом добавить ещё один?

    @choupa
    Архитектор (обычный, который строит)
    var href = $( this ).attr( 'href' );
    $( '.tab-links a [href=' + href + ']' ).addClass( 'selected' );
    Ответ написан
    Комментировать
  • Повреждается часть сообщений отправляемых на email функцией mail php?

    @choupa
    Архитектор (обычный, который строит)
    Я в своё время замучился с кодировками в стандартной функции mail() и стал использовать библиотеку Libmail, чего и вам желаю.
    Ответ написан
    Комментировать
  • Json PHP вывод?

    @choupa
    Архитектор (обычный, который строит)
    :)

    print_r($response->user);
    print_r($response->avatar);
    Ответ написан
  • Как при нажатии найти идентификатор родителя у тега img?

    @choupa
    Архитектор (обычный, который строит)
    $(".lazy").click(function(){
      var dt = $(this).parent().attr('data-type')); 
      $("body").attr({data-type: dt});
    });
    Ответ написан
    1 комментарий
  • Форма выдаёт ошибку, что поля не заполнены, но на почту отправляет?

    @choupa
    Архитектор (обычный, который строит)
    У вас какой-то зоопарк, а не код. Видимо понадёргали из разных мест. Нижняя обработка отправки формы (которая на jQ написана), перекрывает верхнюю, поэтому письмо отправляется всегда.

    Объедините всё в одну функцию:
    $( "form" ).submit( function() {
      if ( !this.checkValidity() ) 
        alert( "Пожалуйста, заполните обязательные поля." );
      else  {
        $.ajax( {
          type: "POST",
          url: "/form/mail.php",
          data: $( this ).serialize()
        } ).done( function() {
          alert( "Заявка принята! В ближайшее время наш менеджер с Вами свяжется." );
        } );
    } );
    Ответ написан
    5 комментариев
  • Как сделать css grid с разным размером строк?

    @choupa
    Архитектор (обычный, который строит)
    Я не придумал ничего лучшего, чем всунуть в левую колонку ещё один грид left-menu-wrapper из одной колонки и двух строк, а уже внутрь поместить меню left-menu.

    .left-menu-wrapper {
      display: grid;
      grid-template-rows: auto 1fr;
    }


    <div class="left-menu-wrapper">
      <div class="left-menu grid">
        <div class="left-menu-element">Left menu</div>
        <div class="left-menu-element">Left menu</div>
        <div class="left-menu-element">Left menu</div>
        <div class="left-menu-element">Left menu</div>
        <div class="left-menu-element">Left menu</div>
        <div class="left-menu-element">Left menu</div>
      </div>
    </div>
    Ответ написан
    Комментировать
  • Как реализовать цикл с возвратом?

    @choupa
    Архитектор (обычный, который строит)
    $s = ['0', '1', '2', '3', '4', '5', '6', '8', '9', 'А', 'B', 'C', 'D'];   //  Можно продолжить массив, сколько надо.
    
    $ok = true;   //  Флаг того, что строка уже присутствует в БД
    for ( $len = 1; $ok; $len++ )  {   	//  "Бесконечный" цикл, увеличиваем длину строки $len
    	$map = clearArray( $len );    	//  Карта перебора символов в массиве $s
    
    	while ( $ok && $map )
    		$str = makeStrByMap( $map );
    		$ok = searchStr( $str );    //  Поиск строки в БД. Найдена — true, не найдена — false
    		$map = nextStep( $map );	//  Следующий шаг карты. Если перебор карты исчерпан, то возвращает вместо массива false	
    }
    
    function clearArray( $len )	{
    //  Создание нулевого массива длины $len
    	$arr = array();
    	for ( $i = 0; $i < $len; $i++ )
    		$arr[ $i ] = 0;
    }
    
    function makeStrByMap( $map )	{
    //  Формирование строки по карте $map
    	global $s;
    	$str = '';
    	for ( $i = 0; $i < sizeof( $map ); $i++ )
    		$str .= $s[ $map[ $i ] ];
    	return $str;
    }
    
    function nextStep( $map )	{
    //  Возвращает следующий шаг карты или false, если достигнут предел перебора
    	global $s;
    	$n = sizeof( $s );
    
    	for ( $i = 0; $i < $n; $i++ )
    		if ( $map[ $i ] == $n )  
    		//  Если в разряде $i достигнут предел, то зануляем его и переходим к инкременту старщего разряда
    			$map[ $i ] = 0;
    
    		else  {
    		//  Если предел не достигнут, просто +1 в текущем разряде
    			$map[ $i ]++;
    			break;
    		}
    
    	return ( $i == $n ) ? $map : false;  //  Если перебор закончен, возвращаем false, если нет — карту
    }
    
    function searchStr( $str )	{
    	...
    }
    Ответ написан
    Комментировать
  • Как изменить текст подобным образом?

    @choupa
    Архитектор (обычный, который строит)
    Я б в 3D замоделил. Подозреваю в вашем примере именно так и делали.
    Ответ написан
    2 комментария
  • Как сделать такой калькулятор?

    @choupa
    Архитектор (обычный, который строит)
    <select name='house_type'>
        <option value='0'>каркасный</option>
       .... 
    </select>
    <input name='square'>
    
    <div id='battery'>  //  Батарея из трёх секций
       <img id='hot' src='hot_section.png'>
       <img id='hot' src='hot_section.png'>
       <img id='hot' src='hot_section.png'>
       <img id='cold' src='cold_section.png'>
       <img id='cold' src='cold_section.png'>
       <img id='cold' src='cold_section.png'>
    </div>


    $( '[name=house_type], [name=square]' ).on( 'change', function() {
        var p = calcPower( $( '[name=house_type]' ).value, $( '[name=square]' ).value )  //  Вычисление количества включённых секций
        showPowerLevel( p );
    });
    
    function showPowerLevel( p )	{
        $( '#hot:lt( '+p+' )' ).show();
        $( '#hot:gt( '+p+'-1 )' ).hide();
        $( '#cold:lt( '+p+' )' ).hide();
        $( '#cold:gt( '+p+'-1 )' ).show();
    }
    
    showPowerLevel( 0 );
    Ответ написан
    6 комментариев
  • Как вернуть элемент в исходную DOM иерархию?

    @choupa
    Архитектор (обычный, который строит)
    Для "исходной точки кода" ведь существует какой-то ориентир в DOM. Для возврата элемента на место напишите снова appendTo с соответствующим селектором. Для простоты можете в точке возврата создать пустой элемент в качестве маркера с каким-то уникальным id, и аппендить назад к нему.
    Ответ написан
  • Как сделать, чтобы код срабатывал после того, как сработает функция?

    @choupa
    Архитектор (обычный, который строит)
    Если текст поменялся, значит функция inputFunction выполнена. Никак иначе! Наверное у вас косяк в CSS с классом inp1. Смотрите в отладчике, что там происходит.
    Ответ написан