Считаю такой велосипед обязательным для сайта. Более того, он может быть весьма важным компонентом. Существенно облегчающим обмен клиент-сервер для разработчика. В 300-400 строк вполне умещается. Если с базовыми обработчиками + классы модал, ноти и т.д чуть больше 1000.
Ну типа, хтмл
<input data-url="/api/ui_site/new_section/" type="text" name="section" data-parent="089ddc76" data-min="1" data-max="3" value="" class="frm">
при изменении, проверит содержание поля или полей формы, и если ок, отправит запрос на data-url, сервер все проверит и чем то ответит. Документ в ответ откроет модальное окно и покажет уведомление. Как на скрине:
В данном случае, запрос обработан так:
private function new_section() { $new = _arr($_POST, 'val'); $parent = ansGet($_POST, 'data.parent'); Core::out_('post', $_POST); Core::out_('noty', ['Новый раздел ' . $new , 'Create new section in sectionId ' . $parent, null, 'info']); Core::out_('modal', ['New section', 'Request : ' . Core::_cnf('headers.Aapp-Csrf') . prnt($_POST), 'Footer', null, 'SE_modalId' ]); }
Но вариантов обработки json ответа может быть 100500:
Ну типа, включение в ответ
Core::out_('js', 'alert("Как сделать кнопку кликабельной только при заполнении полей?")');
---------------
Для формы, в моем случае, как то так:
checkfrm:function(el){ const id = elmId(el), btnid='btn_'+id, errors = el.querySelectorAll('input.error,textarea.error,select.error');; if(errors.length) $$(btnid).disabled = true; else $$(btnid).disabled = false; }
Рецепт универсальный - проверить все поля, если неОк, то класс - error.
Это да, круто, как и всё где промисы нужны, а сделано без них😕
Но, с fetch пока не спешу. Полифилл сильно больше старого xhr с напильником (промисе).
ArbNet, пара изменений в вашем коде, чтобы намекнуть:
else xhr.open('GET',way,true); xhr.onreadystatechange = function () { if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { console.log('Response content-type', xhr.getResponseHeader('content-type')); } }
content-type и всякие стандарты важно, и под них надо подстроиться
if($res) { echo json_encode( ['data'=>[ 'text'=>$res, 'animal'=>$_GET['animals'], 'memusage'=>$m ] ]); die;
На json обратите внимание. Как минимум функцию parsing сократите.
Потом, когда fetch в полный рост встанет, весь ваш код уместится в нескольких строках.
document.querySelectorAll('input[type=checkbox]').forEach( el=>{ el.addEventListener('change', function(e){ const el = e.target||console.error('old browser'); //все равно фетч потом, if(el.checked){ fetch('ajax.php?animals='+el.value) .then(response => response.json()) .then(data => console.log( 'Response', data, 'Element', el, 'Dataset', el.dataset, 'Все что надо есть, делаем что хотим' )); } }); })
Там просто готовое решение на большинство нужд. Которое, со скрипом, но работает. Без скрипа, массовых вариантов в типичном сегменте бюджета нет. Они могли, бы быть, но спрос ограничивается разработчиками-маркетологами с аргументами: на битрикс вона сколько крутых сайтов, на битрикс вона сколько разработчиков, пусть дорогие, но задачу решают. А если самопис - то пропадете вы (разработчик-вендор-лок). Кстати, это любимая фишка сайтостройтелей на ВП. Но, так устроен мир.
Не уверен, что это так уж неподъемно. Если, конечно, сайт не на КМС, там нюансы, в части случаев решаемые +64гига памяти и +8 ядер и все заработает. Не взлетело? Еще +64гига памяти и +8 ядер и все точно заработает:D
В случае с ТС (5-10 html документов)
студент сделает за 3000, а потом 500р на кворк или фл пару раз в месяц (или тот же студент), чтобы поменять телефон или изменить контент. 100500 млн людей знают хтмл.
Вангую затраты:
- первый год: 5500 - 3000 + 5 изменений в контенте
- второй и далее: 1500 - 3 изменения в год
Студент положит прайс на Ядиск и научит директора выгружать его туда. А объекты разместит в Инстаграме и даст ссылку туда с сайта. Само собой, сходит куда нибудь на темплатемонстр (или в гугле введет бест темплате) и красивый, стильный со всякими анимациями шаблон скопипастит
Там просто подход древний до сих пор. Вот как то выкручиваются же люди.
/* * This file is part of Twig. */ class ExpressionParser {/*......*/} class_alias('Twig\ExpressionParser', 'Twig_ExpressionParser');
Правда, для этого изначально какая то стройная логика должна была быть.
Да и название ровно этой же логике подчиняется. Шаблонов то много может быть где название может быть. Кроме того, счет, кп и др. документы которые надо отдать в pdf/xls/doc и тд.
Правда для любого из конфигов, где данным такого типа самое место, не обязательна БД. Скорее даже вредна - конфиг всегда в файле🍿
Про товары, если их тысячи, соглашусь с мнением - проще в БД.
Новый год уже 5 дней как на дворе. Проще и добрее бы. Всем пожелаю.
И эта, категоричность суждений не всегда хорошо. 100500 вариантов может быть.🚬
Типа я въехать не смог?
Безотносительно к коду🍿
По мне так эффективно и просто это хорошо. И не важно иф-елзе или ретурн б==0?1:0 Другое дело, что сделать просто - это очень сложно.
if( b.toString().length() == 4 ) {
может и не так смешно, как это выглядит в полном предложенном коде. Так может получиться, когда не ясно
b=false #или b='false'
Из какого хмл или джисон может зайти. Но и так не оптимально. К вопросу типизации кстати.
Первую строчку кода я видел, предположим ее нет, а b непонятно откуда заходит.
Пока не знаю что сказать.
Фильтр
['стар', 'star', 'тёрт', 'рван', 'терт']
Среди всех слов из 'title', 'headline', 'passages' только
старый потёртость
В ключах из букварикса. Рваный лидирует
[['джинса', 'купить', 'рваный'], 194.5] [['джинса', 'женский', 'купить', 'рваный'], 162.4] [['джинса', 'купить', 'мужской', 'рваный'], 127.96] [['джинса', 'купить', 'рваный', 'спб'], 60.8] [['джинса', 'купить', 'мужской', 'рваный', 'чёрный'], 48.4] [['джинса', 'женский', 'купить', 'рваный', 'чёрный'], 35.16] [['джинса', 'интернет', 'купить', 'рваный'], 34.14] [['star', 'джинса', 'купить'], 31.9] [['девочка', 'детский', 'джинса', 'купить', 'рваный'], 31.24] [['детский', 'джинса', 'купить', 'рваный'], 29.64] [['джинса', 'купить', 'рваный', 'чёрный'], 27.9] [['джинса', 'женский', 'купить', 'рваный', 'спб'], 27.9] [['джинса', 'ебей', 'запас', 'купить', 'левис', 'мужской', 'старое'], 19.38] [['большой', 'джинса', 'женский', 'интернет', 'купить', 'магазин', 'размер', 'рваный'], 18.46] [['джинса', 'интернет', 'купить', 'магазин', 'рваный'], 18.06] [['девочка', 'джинса', 'купить', 'рваный'], 17.52] [['больший', 'джинса', 'купить', 'размер', 'рваный'], 16.94] [['джинса', 'купить', 'рваный'], 15.96] [['джинса', 'купить', 'москва', 'недорого', 'рваный'], 15.48] [['джинса', 'женский', 'интернет', 'купить', 'магазин', 'недорого', 'рваный'], 14.36] [['девочка', 'детский', 'джинса', 'купить', 'рваный'], 14.24] [['джинса', 'женский', 'купить', 'рваный', 'спб'], 13.72] [['детский', 'джинса', 'купить', 'мальчик', 'рваный'], 13.42] [['джинса', 'купить', 'москва', 'рваный'], 13.26] [['raw', 'star', 'джинса', 'купить'], 13.120000000000001] [['джинса', 'интернет', 'купить', 'рваный'], 11.64] [['superstar', 'джинса', 'купить'], 11.36] [['big', 'star', 'джинса', 'купить', 'москва'], 11.26] [['джинса', 'женский', 'интернет', 'купить', 'магазин', 'рваный'], 11.02] [['big', 'star', 'джинса', 'купить'], 10.62] [['джинса', 'купить', 'мальчик', 'рваный'], 10.36] [['беременный', 'джинса', 'купить', 'рваный'], 10.2] [['джинса', 'купить', 'старое'], 9.7] [['star', 'джинса', 'купить', 'мужской'], 9.5] [['джинса', 'женский', 'купить', 'потёртость'], 9.46] [['белые', 'джинса', 'женский', 'купить', 'рваный'], 9.18] [['большой', 'джинса', 'женский', 'купить', 'размер', 'рваный'], 9.16] [['recstar', 'джинса', 'купить'], 8.74] [['биг', 'джинса', 'купить', 'старый'], 8.68] [['джинса', 'джинса', 'купить', 'москва', 'мужской', 'рваный'], 8.68] [['джинса', 'купить', 'мужской', 'потёртый'], 8.44] [['джинса', 'купить', 'москва', 'мужской', 'рваный'], 8.38] [['джинса', 'купить', 'минск', 'рваный'], 8.36] [['воронин', 'джинса', 'купить', 'маша', 'рваный'], 8.3] [['джинса', 'купить', 'рваный', 'широкий'], 8.18] [['recstar', 'джинса', 'купить', 'розница'], 8.16] [['бойфренд', 'джинса', 'женский', 'купить', 'рваный'], 7.5] [['джинса', 'интернет', 'купить', 'магазин', 'мужской', 'рваный'], 7.38] [['raw', 'star', 'джинса', 'купить', 'мужской'], 7.32] [['джинса', 'коленка', 'купить', 'мужской', 'рваный'], 7.16] [['джинса', 'купить', 'мужской', 'рваный', 'фото'], 7.14] [['джинса', 'купить', 'недорого', 'рваный', 'спб'], 7.14] [['джинса', 'коленка', 'купить', 'рваный'], 6.86] [['джинса', 'купить', 'рваный', 'украина'], 6.76] [['белые', 'джинса', 'купить', 'рваный'], 6.68] [['star', 'джинса', 'купить', 'москва'], 6.4] [['джинса', 'интернет', 'купить', 'магазин', 'рваный'], 6.36] [['star', 'джинса', 'женский', 'купить'], 6.32] [['джинса', 'кинг', 'купить', 'старый'], 6.12] [['джинса', 'женский', 'купить', 'недорого', 'рваный'], 5.42] [['джинса', 'купить', 'мужской', 'рваный', 'украина'], 5.32] [['джинса', 'колено', 'купить', 'мужской', 'рваный', 'чёрный'], 5.32] [['джинса', 'купить', 'мужской', 'рваный'], 5.28] [['детский', 'джинса', 'купить', 'мальчик', 'рваный'], 5.28] [['джинса', 'женский', 'купить', 'потёртый'], 5.26] [['bicstar', 'джинса', 'купить'], 5.24] [['джи', 'джинса', 'купить', 'старый'], 5.22] [['джинса', 'купить', 'старый'], 5.14] [['джинса', 'купить', 'низом', 'рваный'], 5.14] [['star', 'джинса', 'интернет', 'купить', 'магазин'], 5.12] [['джинса', 'купить', 'модный', 'рваный', 'рваться'], 5.12] [['star', 'джинса', 'купить', 'москва', 'мужской'], 5.1] [['больший', 'джинса', 'женщина', 'купить', 'размер', 'рваный'], 5.1]
Ну и старые слитые факторы
----
Добавлю из добавления к предыдущему
дилер - дилерский, с точки зрения морфологии разные слова - существительное и прилагательное. С точки зрения моделей ЛСИ/ЛДА и т.д они разные, а по факту одно и тоже---------- Добавлено 24.12.2019 в 01:23 ----------Накидал бы кто запросов, где ПФ/витальности и т.п нет
Понятно, что факторов много и это далеко сзади, но:
{'keyid': '226514527-213', 'key': 'квартира в москве купить', 'lr': 213, 'key3gr': ['ква', 'вар', 'арт', 'рти', 'тир', 'ира', 'рав', 'авм', 'вмо', 'мос', 'оск', 'скв', 'кве', 'век', 'еку', 'куп', 'упи', 'пит', 'ить', 'ть']}
Average top10 YaXml: 0.6649999999999999
Average top20 YaXml: 0.6924999999999998
Average top30 YaXml: 0.6816666666666665
Average top50 YaXml: 0.6609999999999999
Average bottom50 YaXml: 0.6299999999999997
Ключей из букварикса: 5000
Урлов из топа: 100
Подсветок: 5 ['купить', 'квартира', 'москва', 'продажа', 'покупка']
{'keyid': '2265276555-213', 'key': 'купить джинсы', 'lr': 213, 'key3gr': ['куп', 'упи', 'пит', 'ить', 'тьд', 'ьдж', 'джи', 'жин', 'инс', 'нсы', 'сы']}
Average top10 YaXml: 0.766
Average top20 YaXml: 0.7475000000000002
Average top30 YaXml: 0.7473333333333335
Average top50 YaXml: 0.7252
Average bottom50 YaXml: 0.6955999999999999
Ключей из букварикса: 4673
Подсветок: 8 ['купить', 'джинса', 'джинсы', 'москва', 'покупка', 'джинсовый', 'старый', 'покупать']
{'keyid': '3193210542-213', 'key': 'цена тойота камри дилер', 'lr': 213, 'key3gr': ['цен', 'ена', 'нат', 'ато', 'той', 'ойо', 'йот', 'ота', 'так', 'ака', 'кам', 'амр', 'мри', 'рид', 'иди', 'дил', 'иле', 'лер', 'ер']}
Average top20 YaXml: 0.40700000000000003
Average top30 YaXml: 0.3940000000000001
Average top50 YaXml: 0.39720000000000005
Average bottom50 YaXml: 0.507000000000000
Ключей из букварикса: 25
Подсветок: 11 ['toyota', 'camry', 'цена', 'тойота', 'москва', 'купить', 'автосалон', 'камри', 'дилер', 'дилерский', 'стоимость']
Слов в сниппетах: 2257
--------------
В среднем на как то так (снял 3288 ключей)
rAverage top10 YaXml: 0.7829999999999998
rAverage top20 YaXml: 0.7634999999999998
rAverage top30 YaXml: 0.7543333333333336
rAverage top50 YaXml: 0.7702000000000006
rAverage bottom50 YaXml: 0.7260000000000004
Для любознательных - цифра:
t3t = list(set(self.key3gr) & set(title3gramm)) urldata['t3grfactor'] = "%.2f" % ( len(t3t)/len(self.key3gr) )
Почему старый в подсветках для джинсы😕
<passage> Высокая Талия <hlword> Джинсы </hlword> Женский Тонкая Секция Отверстие <hlword> Старая </hlword> Леди Свободная Похудение Брюки - 1TopShop. </passage>
Подсветок: 10 ['купить', 'тойота', 'камри', 'новосибирск', 'toyota', 'camry', 'цена', 'дилер', 'автосалон', 'стоимость']
Чего не хватает в Новосибирске - "дилерский".
Я отреагировал на
Пхпинфо в браузере версия скулайт 3.29, а в консоли 3.30.1.
А libsqlite3.dll есть там?
опоздал.
Рад что решили проблему