Задать вопрос
  • Как сделать календарь событий?

    thewind
    @thewind
    php программист, front / backend developer
    Можно даже без плагина - для инпута пропишите type=date, и там еще дополнительные html5 атрибуты есть. Будет нативный браузерный календарь.
    Ответ написан
    Комментировать
  • Как обновить блок после удаления и добавления и получить данные для редактирования?

    @AndryG
    Очень надеюсь, что это у вас учебная задачка. Выше вам описали проблемы с безопасностью.

    В общем случае вам нужно вместо $('#message').html(data); проводить манипуляции с DOM на основании data. Это вам тоже описали выше. Когда возьметесь за реализацию, то заметите, что один и тот же html код вам приходится реализовывать и на стороне сервера средствами php и на стороне браузера через jQuery. Выкрутиться из этого можно разными способами:
    - дублировать логику в двух реализациях - самый плохой вариант
    - формировать html на стороне сервера, присылать его куски в бразуер аякс-ответом, а потом встраивать в DOM
    - отдавать сервером даные только в json, а html (именно с данными) строить всегда на стороне клиента
    - возвращать в аякс ответе сгенерированный javascript код, который будет проводить нужные манипуляции в DOM :)

    Я порекомендовал бы второй вариант.

    Делаете php функции, которые формируют:

    Строку с данными
    function htmlRowData($row){
    // return IDcomment
    }

    Строку с формой редактирования
    function htmlRowFormEdit($row){
    // return ФОРМА РЕДАКТИРОВАНИЯ
    }

    Рисуете себе API вашего аякса: какие вы запросы отправляете и какие данные вы получаете, формат ответа.
    Используем родной для javascript JSON.
    В ответе сервер может возвращать такие поля:

    showMessage: text // сообщение для юзера. Вывести алертом, всплывашкой (jGrowl) или еще как

    rowAction: "insert"/"replace"/"remove"

    rowHtml: html // html код Загрузка страницы.

    В контейнер формы выводим результат функции htmlForm(NULL) // вернет html пустой формы с кнопкой ДОБАВИТЬ
    Формируем таблицу, используем while($row = mysql_fetch($q){ echo htmlRowData($row);}

    Удаление записи. Ответ сервера
    "showMessage": "Запись 45 успешно удалена",
    "rowAction": "remove",
    "rowId": 45

    JS код находит Успешное добаление записи. Ответ сервера
    "showMessage": "Запись добавлена под номером 46",
    "formHtml": "<div>пустая форма с кнопкой добавить</div>"
    "rowAction": "insert",
    "rowHtml": "<tr data-id=46><td>46<td>это коммент записи 46...</tr>"

    JS код вставляет в таблицу новую строку, забивает новое содержимое в контейнер формы

    Проблема при попытке добавить новую запись. Ответ сервера
    "showMessage": "Упс, комментарий слишком короткий",
    "formHtml": "<div>форма с заполненными полями и кнопками добавить/отменить</div>"

    JS код забивает новое содержимое в контейнер формы (полезно данные обновлять, чтобы видеть, что же ты на сервер шлешь)

    Успешное сохранение измененной записи. Ответ сервера
    "showMessage": "Запись 44 изменена",
    "formHtml": "<div>пустая форма с кнопкой добавить</div>"
    "rowAction": "replace",
    "rowId": 44,
    "rowHtml": "<tr data-id=44><td>44<td>это новый коммент записи 44...</tr>"

    JS код заменяет (jQuery.replace() ) в таблицt строку, забивает новое содержимое в контейнер формы

    Дальше пишем серверную часть.
    Для отладки запросов делаете небольшую страничку и с и в него скидываете приходящие ответы в виде текста $('#debug_div').text(data). И добиваетесьот сервера корректных резуотаттов согласно апи.

    Переходим к брузерной части.
    Читаем про делегирование обработки событий в jQuery. Навешиваем на общий контейнер формы и таблицы обработчик событий всех кнопок добаления удаления, редактирования, сохранения редактирования. Реализовуем модификации DOM, ползуемся атрибутами data-id для поиска нужных мест в table
    Для кнопок можно применить такой вариант.
    Все кнопки имеют атрибут data-ctrl=ACTION, подвязываетесь на событие:

    $('body').on('click', '[data-ctrl]'m function(){
     const $t = $(this);
     const action = $t.data('ctrl');
      
     var ajaxData = {action: "Oops"}; 
      
    
     if('remove' === action){
      ajaxData.action = "remove";
      ajaxData.rowId = $t.closest('tr[data-id]').data('id'); // кнопка удаления находится в строке данных
    }
     ...
    })
     
      $.ajax({
        ...
        data: ajaxData,
        success: function(data){
        if("remove" === data.rowAction){
         ... 
      }
    }
    )


    И ещё совет: для обкатки решения упростите ваши данные до одного поля ID - меньше js кода писать и переписывать.
    Ответ написан
    1 комментарий
  • Как исправить зависание arduino мега?

    NeiroNx
    @NeiroNx
    Программист
    А реле питается отдельно от ардуинки? Так то реле тоже сильный источник помех.
    Ответ написан
    2 комментария
  • Как в opencart 3 вывести атрибуты в категориях и модулях?

    @Alpha12
    в цыкле полученя товаров, к прмеру файл catalog/controller/product/category.php
    ищем строчку
    $data['products']
    и в масив запписиваем
    'attributes_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),

    после, выводим в шаблоне
    Ответ написан
    Комментировать
  • Как вывести контент только на определенной странице?

    Immortal_pony
    @Immortal_pony
    <?php if (get_page_by_path("page-slug")->ID == get_the_ID()) { ?> 
        Мы на конкретной странице
    <?php } ?>
    Ответ написан
    5 комментариев
  • Как убрать обязательные поля заполнения для дополнительных языков Opencart 3?

    @maxeee52
    Можно при сохранении использовать данные с других языков.

    Игнорировать обязательные поля не получится, т.к. нарвётесь на ошибки в моделях или при сохранении в базу данных
    Ответ написан
    Комментировать
  • Как вывести значения из столбцов Mysql?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    1. хранить json в реляционной СУБД и хотеть выборку по полям не лучшая практика
    2. если такая задача остро стоит, то в MySQL есть типа данных JSON который при правильном использовании позволит решить эту задачу https://dev.mysql.com/doc/refman/8.0/en/json.html
    Ответ написан
    Комментировать
  • Как вывести значения из столбцов Mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Купить себе букварь по SQL
    В ужасе дропнуть этот треш
    Сделать нормальную структуру таблиц:
    - таблицу заказов
    - таблицу товаров
    - таблицу товаров в заказе
    Вывести все нужные значения простым SQL запросом
    Ответ написан
    Комментировать
  • Как реализовать поиск в Opencart?

    @barsukoff
    Нужно добавить скрипт:

    $('.button-search').bind('click', function() {
    		url = $('base').attr('href') + 'index.php?route=product/search';
    		var search = $('input[name=\'search\']').attr('value');
    		if (search) {
    			url += '&search=' + encodeURIComponent(search);
    		}
    		location = url;
    	});
    $('#header input[name=\'search\']').bind('keydown', function(e) {
    		if (e.keyCode == 13) {
    			url = $('base').attr('href') + 'index.php?route=product/search';
    			var search = $('input[name=\'search\']').attr('value');
    			if (search) {
    				url += '&search=' + encodeURIComponent(search);
    			}
    			location = url;
    		}
    	});
    Ответ написан
    Комментировать
  • Как вывести атрибуты opencart в data для рекомендуемые?

    glossyweb
    @glossyweb
    Mark marketing
    featured.php
    'attribute_groups' => $this->model_catalog_product->getProductAttributes($product_info['product_id']),

    и в темплейте
    <?php if($product['attribute_groups']) { ?>
    	<div>         
    	  <table class="table table-bordered table-condensed table-striped">
    		<thead>
    		</thead>
    		<tbody>
    		 <?php foreach($product['attribute_groups'] as $attribute_group) { ?>
    		 <?php foreach($attribute_group['attribute'] as $attribute) { ?>
    		  <tr>
    			<td><b><?php echo $attribute['name']; ?></b></td>
    			<td><?php echo $attribute['text']; ?></td>
    		  </tr>
    		  <?php } ?>
    		  <?php } ?>
    		</tbody>
    	  </table>
    	</div>
    	<?php } ?>
    Ответ написан
    3 комментария
  • Как правильно сформировать поисковый запрос в Elasticsearch?

    @SergeyTSA Автор вопроса
    Сам же на свой вопрос и отвечу :-)
    У меня получилось сделать таким способом:
    {
    	"query": {
    		"filtered": {
    			"filter": {
    				"bool": {
    					"must": [
    						{
    							"bool": {
    								"must": [
    									{"term": {"tags.group_id": 818}},
    									{"term": {"tags.tag_id": 223}}
    								]
    							}
    						},
    						{
    							"bool": {
    								"should": [
    									{"term": {"categories": 9110}},
    									{"term": {"categories": 9111}},
    									{"term": {"categories": 9114}},
    									{"term": {"categories": 9109}}
    								]
    							}
    						}
    					]
    				}
    			}
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Как добавлять br либо перенос строки в текстовой области настройки магазина?

    @VVCh
    $data['comment'] = $this->config->get('config_comment');


    $data['comment'] = nl2br($this->config->get('config_comment');)
    Ответ написан
    Комментировать
  • Как открывать вкладку в новом окне?

    like-a-boss
    @like-a-boss
    Признайся,тебяТянетНаКодМужика,ты—программный гей
    Изучить HTML. Атрибут target, отвечающий за открытие ссылки в новом окне, принадлежит тегу a.
    Ответ написан
    5 комментариев
  • Как скрыть товары в opencart?

    @liza2019
    заменить AND p.quantity > 0
    на
    AND p.quantity > '-100'
    Ответ написан
    2 комментария
  • Как срыть пустой тег?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    <?php $posttags = get_the_tags(); ?>
    <?php if( $posttags ){ ?>
      <li class="cat"><span><i class="fa fa-tags" aria-hidden="true"></i><?php the_tags(); ?></span></li>
    <?php } ?>
    Ответ написан
    1 комментарий
  • Как добавить в код если нет записи совпадающая с тремя параметрами выводить строку нет записи?

    glaphire
    @glaphire
    PHP developer
    <?php
        $intel = (isset($_GET['Intel']) && $_GET['Intel'] == 'Yes') ? $_GET['Intel'] : false;
        $amd = (isset($_GET['AMD']) && $_GET['AMD'] == 'Yes') ? $_GET['AMD'] : false;
        $s775 = (isset($_GET['s775']) && $_GET['s775'] == 'Yes') ? $_GET['AMD'] : false;
    
        if ($intel && $amd && $s775) :
    ?>
        <!-- -->
    <?php	echo('Intel, AMD, s775' ); ?>
    <?php
    $true_args = array(
        'meta_query' => array(
            array(
                'key' => 'soket_processor_pc',
                'value' => 's775'
            )
        )
    );
    $true_args = array(
        'meta_query' => array(
            array(
                'key' => 'manufacturer_processor_pc',
                'value' => 'intel'
            )
        )
    );
    $true_args = array(
        'meta_query' => array(
            array(
                'key' => 'manufacturer_processor_pc',
                'value' => 'amd'
            )
        )
    );
    $true_query = new WP_Query( $true_args );
    ?>
        <div>some posts from true query</div>
    <?php else: ?>
        <div>"no posts"</div>
    <?php	endif;  ?>

    Позволю сделать пару замечаний по коду, которые я исправила)
    1. Если условие if разрывается версткой - используйте сахар if(): ... endif;
    2. && и and - не одно и тоже, лучше явно использовать && - ссылка по теме
    3. Длинные условия плохо читаются и рефакторятся, выносите их вычисление в переменные
    Ответ написан
    8 комментариев
  • Post и Get запросы, какая между ними разница и что лучше и для каких целей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Общего между ними то что они работают одинаково. Разницы между ними технически никакой. А вот идеологические различия есть.

    Я расскажу о них в контексте PHP. Прошу заметить что протокол HTTP к PHP имеет косвенное отношение потому что он создавался для обмена html страницами а PHP просто расширяет возможности и того и другого.

    GET запрос используется чтобы получить данные а POST чтобы отправить. (Напоминаю что технически они работают одинаково).

    Поэтому в контексте PHP опираясь на эту идеологию сделали следующим образом:
    1. При каждом запуске PHP по умолчанию создаются суперглобальные массивы ($_GET, $_POST).
    2. Если в строке запроса есть вопросительный знак(?). То все что после него считается параметрами GET запроса они представлены в формате 'ключ'='значение' и в качестве разделителя используется знак амперсанда (&)
    Пример:
    GET /index.php?name=Андрей&surname=Галкин
    это строка запроса, тут 2 параметра. эти параметры попадут в массив $_GET.
    3. $_POST заполняется другим способом. содержимое этого массива заполняется из "заголовков запроса". То есть из места, скрытого от глаз в явном виде. Всю рутину по созданию таких заголовков берет на себя браузер. Хотя иногда и что-то редактируется в заголовках в ручную.

    Чаще всего пост запрос используется в формах (для отправки данных).

    Например у нас есть форма для входа 2 поля логин и пароль.

    Представим что мы используем GET метод. Тогда при отправке формы мы перейдем на следующий адрес /login.php?login=Андрей&password=123 согласитесь что так передавать такую информацию совсем не безопасно. Любой может открыть ваш браузер и начиная вводить адрес сайта он из истории может увидеть ваши пароли и логины.

    А вот если бы мы указали методом POST то мы бы получили следующий запрос:
    POST /login.php (login=Андрей&password=123) то что в скобочках было бы скрыто и никак не сохранено в браузере.

    Теперь другая ситуация например форма поиска. Мы вводим текст и получаем страницу с результатами. Вот тут уместнее GET форма. потому что нам было бы удобно сразу иметь ссылку на результат поиска, то есть добавить в строку запроса можно выразится "Публичные параметры", которыми можно поделиться. И как результат в строке браузера будет конкретная ссылка на текущую страницу. Мы можем ее скопировать, и разместить где-нибудь, или например скинуть другу. И получить при переходе одну и ту же страницу. А не просить других людей зайти на сайт и в поиск вбить определенную фразу чтобы получить необходимую страницу.

    В общем подводя итог:
    GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
    POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

    И еще одна хорошая новость их можно комбинировать, например
    POST /index.php?page=login (login=Андрей&password=123) Думаю я уже достаточно объяснил что из этого получится и какие параметры в какой массив попадут.
    Ответ написан
    2 комментария