timo-71

Рейтинг
63
Регистрация
19.09.2018
silicoid:
надо будет как-нибудь заморочиться написать такой велосипедище.

Считаю такой велосипед обязательным для сайта. Более того, он может быть весьма важным компонентом. Существенно облегчающим обмен клиент-сервер для разработчика. В 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.

Aisamiery:
fetch

Это да, круто, как и всё где промисы нужны, а сделано без них😕

Но, с 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,
'Все что надо есть, делаем что хотим' ));
}
});
})
danforth:
Кто пропускает все эти говнометоды в ядро, у которых 21 аргумент

Там просто готовое решение на большинство нужд. Которое, со скрипом, но работает. Без скрипа, массовых вариантов в типичном сегменте бюджета нет. Они могли, бы быть, но спрос ограничивается разработчиками-маркетологами с аргументами: на битрикс вона сколько крутых сайтов, на битрикс вона сколько разработчиков, пусть дорогие, но задачу решают. А если самопис - то пропадете вы (разработчик-вендор-лок). Кстати, это любимая фишка сайтостройтелей на ВП. Но, так устроен мир.

danforth:
учитывая всякие интеграции, которыми славится Битрикс (например их CRM, учет складских остатков), то такой переход осилят только крупные компании

Не уверен, что это так уж неподъемно. Если, конечно, сайт не на КМС, там нюансы, в части случаев решаемые +64гига памяти и +8 ядер и все заработает. Не взлетело? Еще +64гига памяти и +8 ядер и все точно заработает:D

danforth:
В случае CMS для сайта фирмы (возвращаясь к названию темы), WordPress от Битрикса отличается тем, что выжрет меньше денег

В случае с ТС (5-10 html документов)

Страницы стандартные в таких случая: главная, о нас, услуги/продукция, прайс, объекты.

студент сделает за 3000, а потом 500р на кворк или фл пару раз в месяц (или тот же студент), чтобы поменять телефон или изменить контент. 100500 млн людей знают хтмл.

Вангую затраты:

- первый год: 5500 - 3000 + 5 изменений в контенте

- второй и далее: 1500 - 3 изменения в год

Студент положит прайс на Ядиск и научит директора выгружать его туда. А объекты разместит в Инстаграме и даст ссылку туда с сайта. Само собой, сходит куда нибудь на темплатемонстр (или в гугле введет бест темплате) и красивый, стильный со всякими анимациями шаблон скопипастит

Sitealert:
Поддерживаются устаревшие методы, из-за чего распухает ядро. Но хорошо это или плохо – вопрос дискуссионный.

Там просто подход древний до сих пор. Вот как то выкручиваются же люди.

/* * This file is part of Twig. */

class ExpressionParser
{/*......*/}
class_alias('Twig\ExpressionParser', 'Twig_ExpressionParser');

Правда, для этого изначально какая то стройная логика должна была быть.

danforth:
Ну название нет, а телефон - да
....
он ещё в шаблоне email уведомлений, на странице корзины (там другая шапка, упрощенная), на странице контактов. Я бы предпочел его заменить где-то один раз.

Да и название ровно этой же логике подчиняется. Шаблонов то много может быть где название может быть. Кроме того, счет, кп и др. документы которые надо отдать в pdf/xls/doc и тд.

Правда для любого из конфигов, где данным такого типа самое место, не обязательна БД. Скорее даже вредна - конфиг всегда в файле🍿

Про товары, если их тысячи, соглашусь с мнением - проще в БД.

Sly32:
А не индюка с надутыми щеками
SeVlad:
Или скорее тупишь как обычно.

Новый год уже 5 дней как на дворе. Проще и добрее бы. Всем пожелаю.

И эта, категоричность суждений не всегда хорошо. 100500 вариантов может быть.🚬

danforth:
Вот за такое бить по рукам

Типа я въехать не смог?

Безотносительно к коду🍿

По мне так эффективно и просто это хорошо. И не важно иф-елзе или ретурн б==0?1:0 Другое дело, что сделать просто - это очень сложно.

if( b.toString().length() == 4 ) {

может и не так смешно, как это выглядит в полном предложенном коде. Так может получиться, когда не ясно

b=false

#или
b='false'

Из какого хмл или джисон может зайти. Но и так не оптимально. К вопросу типизации кстати.

Первую строчку кода я видел, предположим ее нет, а b непонятно откуда заходит.

burunduk:
джинсы с потёртостями/рваные/состаренные...

Пока не знаю что сказать.

Фильтр

['стар', 'star', 'тёрт', 'рван', 'терт']

Среди всех слов из 'title', 'headline', 'passages' только

старый

потёртость
нашлись, в hlword только старый.

В ключах из букварикса. Рваный лидирует

[['джинса', 'купить', 'рваный'], 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]
xVOVAx:
Зачем все это ?

Ну и старые слитые факторы

[501] TitleTrigramsQuery Вычисляет покрытие запроса буквенными триграммами заголовка документа

----

Добавлю из добавления к предыдущему

дилер - дилерский, с точки зрения морфологии разные слова - существительное и прилагательное. С точки зрения моделей ЛСИ/ЛДА и т.д они разные, а по факту одно и тоже

---------- Добавлено 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

Урлов из топа: 100

Подсветок: 8 ['купить', 'джинса', 'джинсы', 'москва', 'покупка', 'джинсовый', 'старый', 'покупать']

{'keyid': '3193210542-213', 'key': 'цена тойота камри дилер', 'lr': 213, 'key3gr': ['цен', 'ена', 'нат', 'ато', 'той', 'ойо', 'йот', 'ота', 'так', 'ака', 'кам', 'амр', 'мри', 'рид', 'иди', 'дил', 'иле', 'лер', 'ер']}
Average top10 YaXml: 0.41400000000000003

Average top20 YaXml: 0.40700000000000003

Average top30 YaXml: 0.3940000000000001

Average top50 YaXml: 0.39720000000000005

Average bottom50 YaXml: 0.507000000000000

Ключей из букварикса: 25

Урлов из топа: 100

Подсветок: 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>

----

Подсветок: 11 ['toyota', 'camry', 'цена', 'тойота', 'москва', 'купить', 'автосалон', 'камри', 'дилер', 'дилерский', 'стоимость']

Подсветок: 10 ['купить', 'тойота', 'камри', 'новосибирск', 'toyota', 'camry', 'цена', 'дилер', 'автосалон', 'стоимость']

Чего не хватает в Новосибирске - "дилерский".

LEOnidUKG:
Ок, я добавил два пути до самой папки PHP и до ext папки. Ничего не поменялось.
Я говорю не про версию Sqlite3, а про то, что вообще не подключается она.

Я отреагировал на

При этом если выполнять скрипты через консоль php.exe -m всё отлично

Пхпинфо в браузере версия скулайт 3.29, а в консоли 3.30.1.

А libsqlite3.dll есть там?

sqlite3.installation.php:
Этому расширению требуются следующие файлы в переменной PATH: libsqlite3.dll.

опоздал.

Рад что решили проблему

Всего: 541