[Модуль] Продукты (app_products)
Модератор: immortal
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль Продукты
И ещё такая вещь - если добавлять распознавание конструкций одну бутылку, 2 ящика и т.д., то не понятно что с этим количеством делать дальше, так как в списках покупки нету поля количество. Лично мне было бы удобнее пользоваться списком, где есть количество и единицы изменения. Тогда можно было дополнить функцию addToList 2 параметрами Qty, Ed_Izm и соответственно сразу же и заполнять голосом.
Сейчас модуль как-то очень переусложнен, возможно имеет смысл сделать какой-то упрощенный модуль Simple_Products, где есть
Категория продуктов
Продукты
Список покупок
т.е. 2 справочника (Категории, продукты), режим редактирования списка продуктов (добавление из справочника, редактирование количества, удаление из списка) и режим В магазине, где выводится список Продуктов для покупки с галочкой. Когда галочка ставится продукт зачеркивается и перемещается в низ списка.
И совсем голубая мечта, если бы список можно было передать в мобильник, где галочки ставить в какой-нибудь простенькой програмке. Если бы у Google Keep был api, то сделать это было бы очень просто, но api нету... 8-(
Сейчас модуль как-то очень переусложнен, возможно имеет смысл сделать какой-то упрощенный модуль Simple_Products, где есть
Категория продуктов
Продукты
Список покупок
т.е. 2 справочника (Категории, продукты), режим редактирования списка продуктов (добавление из справочника, редактирование количества, удаление из списка) и режим В магазине, где выводится список Продуктов для покупки с галочкой. Когда галочка ставится продукт зачеркивается и перемещается в низ списка.
И совсем голубая мечта, если бы список можно было передать в мобильник, где галочки ставить в какой-нибудь простенькой програмке. Если бы у Google Keep был api, то сделать это было бы очень просто, но api нету... 8-(
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль Продукты
Нашел неофициальный клиент на питоне https://github.com/kiwiz/gkeepapi
Сделал сохранение списка в текстовый файл и отправку содержимого в лист Google Keep путем запуска скрипта на питоне. То что надо
Теперь есть 4 шаблона
Надо купить
Прочти список
Отправь список
Всё купили
Сделал сохранение списка в текстовый файл и отправку содержимого в лист Google Keep путем запуска скрипта на питоне. То что надо
Теперь есть 4 шаблона
Надо купить
Прочти список
Отправь список
Всё купили
- lanket
- Сообщения: 1168
- Зарегистрирован: Вт окт 14, 2014 11:27 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 260 раз
- Поблагодарили: 163 раза
Re: Модуль Продукты
Да именно это и не хватает для счастья. На данный момент в модуле есть реализация с количеством продуктов. Но не в этом русле. Сейчас количество подразумевается это текущее наличие продуктов в холодильнике. Неудобно хочу сказать. Не думаю что беря какой либо продукт, например яблоко, будешь кнопки топтать или кричать Алисе что минус одно яблоко. А если готовишь что то. На каждый индигридиент надо отчитываться Алисе.fandaymon писал(а):И ещё такая вещь - если добавлять распознавание конструкций одну бутылку, 2 ящика и т.д., то не понятно что с этим количеством делать дальше, так как в списках покупки нету поля количество. Лично мне было бы удобнее пользоваться списком, где есть количество и единицы изменения. Тогда можно было дополнить функцию addToList 2 параметрами Qty, Ed_Izm и соответственно сразу же и заполнять голосом.
...
Заказ продуктов с количеством необходим как воздух. Мне и супруге приходится вручную править нужное количество.
Так мажордроид и есть для работы и отметки в магазине что надо купить, и галочки с переносом вниз списка, как у Гугла киип, с пометкой что уже в карзине. Единственное что сейчас модуль не вычеркивает из списка покупок а только отмечает что уже в карзине. Что бы вычеркнуть надо потыкать в каждый что мол надо удалить из списка.fandaymon писал(а):...
Сейчас модуль как-то очень переусложнен, возможно имеет смысл сделать какой-то упрощенный модуль Simple_Products, где есть
Категория продуктов
Продукты
Список покупок
т.е. 2 справочника (Категории, продукты), режим редактирования списка продуктов (добавление из справочника, редактирование количества, удаление из списка) и режим В магазине, где выводится список Продуктов для покупки с галочкой. Когда галочка ставится продукт зачеркивается и перемещается в низ списка.
И совсем голубая мечта, если бы список можно было передать в мобильник, где галочки ставить в какой-нибудь простенькой програмке. Если бы у Google Keep был api, то сделать это было бы очень просто, но api нету... 8-(
А ещё галочка работает как +1 шт к количеству. Это как я понял задумка была контроль текущего количества продуктов, отсюда и закладка с 'закончившимся' продуктами.
В общем как то недаработан механизм. Для меня не идеально, тоже думал что надо переделать.
Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль Продукты
У меня нет доступа к мажордомо извне, да и Google Keep на мой вкус идеально работает со списком - никаких лишних телодвижений
Не знаю - заметил ли ты новую версию файла - там добавлена твоя хотелка с хлеба белого. Пробуй!
Не знаю - заметил ли ты новую версию файла - там добавлена твоя хотелка с хлеба белого. Пробуй!
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Модуль Продукты
Добавлю свои пять копеек
если в шаблоне products_search_admin добавить перед <td width="85%"> строку то выведите рядом с названием картинку товара
ps: рекомендую добавить шаблон в папку templates_alt чтоб не пропали изменения после обновления
если в шаблоне products_search_admin добавить перед <td width="85%"> строку
Код: Выделить всё
<td style="text-align:center;">[#if IMAGE!=""#]<img style='max-height:45px; max-width: 26px;' src='/cms/products/[#IMAGE#]'>[#endif#]</td>
ps: рекомендую добавить шаблон в папку templates_alt чтоб не пропали изменения после обновления
- Вложения
-
- Clip2net_180222133549.png (19.84 КБ) 3600 просмотров
Последний раз редактировалось webms Чт фев 22, 2018 2:31 pm, всего редактировалось 2 раза.
- Рейтинг: 1.16%
- lanket
- Сообщения: 1168
- Зарегистрирован: Вт окт 14, 2014 11:27 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 260 раз
- Поблагодарили: 163 раза
Re: Модуль Продукты
Хорошая идея.webms писал(а):Добавлю свои пять копеек
если в шаблоне products_search_admin добавить перед <td width="85%"> строкуто выведите рядом с названием картинку товараКод: Выделить всё
<td>[#if IMAGE!=""#]<img style='width: 26px; ' src='/cms/products/[#IMAGE#]'>[#endif#]</td>
ps: рекомендую добавить шаблон в папку templates_alt чтоб не пропали изменения после обновления
Так может это добавить в родной шаблон? Никто не против?
Отправлено с моего Redmi Note 4 через Tapatalk
- Рейтинг: 1.16%
Разработка голосового асистента для Мажордомо по любому ключевому слову.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Модуль Продукты
я не против)
еще я закомментировал вот это
мне не нрав что добавляется +1
еще я закомментировал вот это
Код: Выделить всё
<!--td>
<div id="product_[#ID#]_ok"[#if IN_CART!="1"#] style="display:none"[#endif#]>
<a href="#" onClick="return notInCart([#ID#]);"><img class="crug" src="<#ROOTHTML#>img/btn/ok.png" border="0"></a>
</div>
<div id="product_[#ID#]_notok"[#if IN_CART="1"#] style="display:none"[#endif#]>
<a href="#" onClick="return inCart([#ID#]);"><img class="crug" src="<#ROOTHTML#>img/btn/notok.png" border="0"></a>
</td-->
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Модуль Продукты
Вот так теперь выглядит модуль
Свайпом влево появляются кнопки чтоб отметить если продукт в корзине
PS: Только что появилось идея убрать из корзины кнопки +/- и тогда влезет и "отмечалка"
Свайпом влево появляются кнопки чтоб отметить если продукт в корзине
PS: Только что появилось идея убрать из корзины кнопки +/- и тогда влезет и "отмечалка"
- Вложения
-
- 2018-02-23 11-43-19.PNG (103.81 КБ) 3533 просмотра
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Модуль Продукты
Новая версия файла - теперь отличает множественное число от единственного и если просили купить бананы, то так и добавит - бананы.
Так же отслеживает случай, когда слово глагол и существительное, как ни странно таким является чай.
По поводу количества. Вопрос к lanket
Кстати опробовал весь цикл с Google Keep - жена наговорила что нужно купить в магазине, сказала чтобы список отправился, я получил его в Google Keep, пришёл в магазин, брал товар, кликал на галочку в кипере, зачёркнутый тут же перемещался в низ списка. Вверху оставалось то, что надо купить - очень удобно. Со списком на бумажке или в смске не сравнить. Рекомендую Картинок правда нету
Так же отслеживает случай, когда слово глагол и существительное, как ни странно таким является чай.
По поводу количества. Вопрос к lanket
А вручную это где именно правится?Заказ продуктов с количеством необходим как воздух. Мне и супруге приходится вручную править нужное количество.
СпойлерПоказать
Код: Выделить всё
<?php
//$command='черный молотый перец белого лука гель для душа йогурт марки денон красные розы';
require_once(ROOT . "lib/phpmorphy/common.php");
$opts = array(
'storage' => PHPMORPHY_STORAGE_MEM,
'predict_by_suffix' => true,
'predict_by_db' => true,
'graminfo_as_text' => true,
);
$dir = ROOT . 'lib/phpmorphy/dicts';
$lang = 'ru_RU';
try {
$morphy = new phpMorphy($dir, $lang, $opts);
$this->morphy =& $morphy;
} catch (phpMorphy_Exception $e) {
die('Error occured while creating phpMorphy instance: ' . PHP_EOL . $e);
}
$words = explode(' ', $command);
$base_forms = array();
$partsOfSpeech=array();
$f_word=array();
$totals = count($words);
for ($is = 0; $is < $totals; $is++) {
if (preg_match('/^(\d+)$/', $words[$is])) {
$base_forms[$is] = array($words[$is]);
} else {
$Word = mb_strtoupper($words[$is], 'UTF-8');
$base_forms[$is] = $morphy->getBaseForm($Word);
$partsOfSpeech[$is] = $morphy->getPartOfSpeech($Word);
$f_word[$is] = $morphy->getGramInfo($Word);
if ( count($partsOfSpeech[$is])==2) {
if ($partsOfSpeech[$is][0]=="С" and $partsOfSpeech[$is][1]=="П") {
$partsOfSpeech[$is][0]="П";
}
elseif ($partsOfSpeech[$is][0]=="Г" and $partsOfSpeech[$is][1]=="С") {
$partsOfSpeech[$is][0]="С";
$base_forms[$is][0]=$base_forms[$is][1];
$chislo=array_intersect($f_word[$is][1][0]['grammems'],['ЕД', 'МН']);
$chislo=reset($chislo);
$rod=array_intersect($f_word[$is][1][0]['grammems'],['МР', 'ЖР', 'СР']);
$rod=reset($rod);
$f_word[$is][0][0]['grammems'][0]=$cislo;
$f_word[$is][0][0]['grammems'][1]=$rod;
}
}
$base_forms[$is][]=$words[$is];
}
}
say('Добавляю в список покупок',2);
for ($is = 0; $is < $totals; $is++) {
if ($base_forms[$is][0]=='ВОД') $base_forms[$is][0]='ВОДА';
if ($partsOfSpeech[$is][0]=='С') {
$chislo=array_intersect($f_word[$is][0][0]['grammems'],['ЕД', 'МН']);
$chislo=reset($chislo);
if (($is+1)<$totals) {
if ($partsOfSpeech[$is+1][0]=='С') {
if ($base_forms[$is+1][0]=='МАРКА' or $base_forms[$is+1][0]=='ФИРМА') {
$product=$base_forms[$is][0]. ' ' . $words[$is+1] . ' ' . $words[$is+2];
$is=$is+2;
}
else {
$product=$morphy->castFormByGramInfo($base_forms[$is][0],'С',[$chislo,'ИМ']);
$product=$product[0]['form'];
}
}
elseif ($partsOfSpeech[$is+1][0]=='ПРЕДЛ') {
$product=$base_forms[$is][0] . ' ' . $words[$is+1] . ' ' . $words[$is+2];
$is=$is+2;
}
elseif ($partsOfSpeech[$is+1][0]=='П') {
$rod=array_intersect($f_word[$is+1][0][0]['grammems'],['МР', 'ЖР', 'СР']);
$rod=reset($rod);
// Выбираем форму прилагательного правильного рода
if ($chislo=='ЕД') {
$adjective=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",[$rod,'ЕД','ИМ']);
}
else {
$adjective=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",['МН','ИМ']);
}
$adjective=$adjective[0]['form'];
$noun=$morphy->castFormByGramInfo($base_forms[$is][0],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
if (Get_Product_ID($adjective . " " . $noun)>0) {
$product=$adjective . " " . $noun;
$is=$is+1;
}
else {
$product=$noun ;
}
}
}
else {
$noun=$morphy->castFormByGramInfo($base_forms[$is][0],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
$product=$noun;
}
}
elseif ($partsOfSpeech[$is][0]=='П') {
$rod=array_intersect($f_word[$is][0][0]['grammems'],['МР', 'ЖР', 'СР']);
$rod=reset($rod);
$chislo=array_intersect($f_word[$is][0][0]['grammems'],['МН', 'ЕД']);
$chislo=reset($chislo);
// Выбираем форму прилагательного правильного рода
if ($chislo=='ЕД') {
$adjective=$morphy->castFormByGramInfo($base_forms[$is][0],"П",[$rod,'ЕД','ИМ']);
}
else {
$adjective=$morphy->castFormByGramInfo($base_forms[$is][0],"П",['МН','ИМ']);
}
$adjective=$adjective[0]['form'];
if (($is+1)<$totals) {
if ($partsOfSpeech[$is+1][0]=='С') {
if (count($base_forms[$is+1])>2){
// выбираем форму согласованную по роду
for ($kk= 0; $kk < count($base_forms[$is+1])-1; $kk++) {
$rod1=array_intersect($f_word[$is+1][$kk][0]['grammems'],['МР', 'ЖР', 'СР']);
$rod1=reset($rod1);
if ($rod==$rod1) break;
}
$noun=$morphy->castFormByGramInfo($base_forms[$is+1][$kk],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
$product=$adjective .' ' . $noun ;
$is=$is+1;
}
else {
$noun=$morphy->castFormByGramInfo($base_forms[$is+1][0],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
$product=$adjective .' ' . $noun ;
$is=$is+1;
}
}
elseif ($partsOfSpeech[$is+1][0]=='П') {
if ($chislo=='ЕД') {
$adjective1=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",[$rod,'ЕД','ИМ']);
}
else {
$adjective1=$morphy->castFormByGramInfo($base_forms[$is+1][0],"П",['МН','ИМ']);
}
$adjective1=$adjective1[0]['form'];
if (($is+2)<$totals) {
if ($partsOfSpeech[$is+2][0]=='С') {
if (count($base_forms[$is+2])>2){
// выбираем форму согласованную по роду
for ($kk= 0; $kk < count($base_forms[$is+2])-1; $kk++) {
$rod1=array_intersect($f_word[$is+2][$kk][0]['grammems'],['МР', 'ЖР', 'СР']);
$rod1=reset($rod1);
}
$noun=$morphy->castFormByGramInfo($base_forms[$is+2][$kk],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
$product=$adjective .' ' . $adjective1 . ' ' . $noun ;
$is=$is+2;
}
else {
$noun=$morphy->castFormByGramInfo($base_forms[$is+2][0],'С',[$chislo,'ИМ']);
$noun=$noun[0]['form'];
$product=$adjective .' ' . $adjective1 .' ' . $base_forms[$is+2][0];
$is=$is+2;
}
}
else {
$product=$adjective .' ' . $adjective1;
$is=$is+1;
}
}
else {
$product=$adjective .' ' . $adjective1;
$is=$is+1;
}
}
}
else {
$product=$adjective;
}
}
$product = strtolower($product);
say($product,2);
if($debugEnabled) debmes('Products produkt:'. $product);
$id=Get_Product_ID( $product);
if ($id > 0){
$this->addToList($id);
if($debugEnabled) debmes('Products produkt '.$product.' found, ID:'. $id);
}
Else {
if($debugEnabled) debmes('Products produkt '.$product.' not found, adding');
$category_id = Get_Category_ID("Неотсортированные");
if ($category_id > 0){
if($debugEnabled) debmes('Products category exiting unknown');
$this->category_id = $category_id;
}
Else {
if($debugEnabled) debmes('Products creating unknown');
$Record = Array();
$Record['TITLE'] = "Неотсортированные";
$Record['ID']=SQLInsert('product_categories', $Record);
$category_id = $Record['ID'];
if($debugEnabled) debmes('Products produkt '.$product.' adding to created unknown');
}
$Record = Array();
$Record['TITLE'] = $product;
$Record['CATEGORY_ID'] = $category_id;
$Record['QTY'] = 1;
$Record['ID']=SQLInsert('products', $Record);
$id = $Record['ID'];
$this->addToList($id);
if($debugEnabled) debmes('Products produkt '.$product.' not found, added to category id '.$category_id);
}
}
function Get_Product_ID($product) {
$res=SQLSelectOne("select ID from products where TITLE='" . $product . "'");
$id=0;
if ($res['ID']) {
$id=$res['ID'];
}
return $id;
}
function Get_Category_ID($category) {
$res=SQLSelectOne("select ID from product_categories where TITLE='" . $category . "'");
$id=0;
if ($res['ID']) {
$id=$res['ID'];
}
return $id;
}
?>
- lanket
- Сообщения: 1168
- Зарегистрирован: Вт окт 14, 2014 11:27 pm
- Откуда: Санкт-Петербург
- Благодарил (а): 260 раз
- Поблагодарили: 163 раза
Re: Модуль Продукты
Так количество между + и -fandaymon писал(а):...
По поводу количества. Вопрос к lanket
...
Идея создателя модуля была в учёте наличия. Отсюда и вкладка с выборкой где количество =0
Но как то неудобно для меня.
По мне как это поле больше подходит к количеству что надо купить.
Отправлено с моего Redmi Note 4 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Обсужение
gitHub 2й версии терминала
GitHub модуля для МД
gitHub сырого модуля 2й версии
Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.