Учитывая общую тенденцию к голосовым помощникам и голосовому управлению добавил функцию в этот модуль для интеграции с голосовыми командами.
Супруга в восторге. Да и мне удобнее. Без этого приходиться длинные смски отрабатывать в магазине, в редактор их, удалять что уже купленно, все одним сплошным текстом без категорий конечно ...
Отправил пуллреквест сергею в данный модуль.
Не знаю пройдет ли он модерацию, программист из меня посредственный, но вроде работает.
Если не пройдет и кому интересно, либо хочется прямо сейчас то вот
мой репозитарий
Собственно добавил в модуль всего лишь одну функцию, остальной код остался неизменным:
Код: Выделить всё
/**
* add To Shoping List From Voice
*
* @access public
*/
function addToListFromVoice($voiceList) {
global $sortby;
global $title;
if(gg('debugEnabled') == 'Producty') $debugEnabled = 1;
if($debugEnabled) debmes('Products incoming message:'. $voiceList);
$products = explode(" ", $voiceList);
if($debugEnabled) debmes('Products incoming count:'. count($products));
If (count($products) > 0) {
// $this->voice = True;
foreach ($products as $product) {
if(strlen($product) > 2)
{
if($debugEnabled) debmes('Products produkt:'. $product);
$srch = array();
$srch['CODE'] = $product;
$srch['IS_CODE'] = False;
$this->search_products($srch);
if (count($srch['RESULT']) > 0){
$this->addToList($srch['RESULT'][0]['ID']);
if($debugEnabled) debmes('Products produkt '.$product.' found, ID:'. $srch['RESULT'][0]['ID']);
}
Else
{
if($debugEnabled) debmes('Products produkt '.$product.' not found, adding');
$sear = array();
$sortby = 'ID';
$title = "Неотсортированные";
// $sear['TITLE'] = "Неотсортированные";
$this->search_product_categories($sear);
if (count($sear) > 0){
if($debugEnabled) debmes('Products category exiting uncnoun');
$this->category_id = $sear['RESULT'][0]['ID'];
//$srch['CATEGORY_ID'] = $sear['RESULT'][0]['ID'];
}
Else
{
if($debugEnabled) debmes('Products creating uncnoun');
$this->mode='update';
$this->edit_product_categories($srch);
$this->category_id = $srch['CATIDADDED'];
//$srch['CATEGORY_ID'] = $srch['CATIDADDED'];
if($debugEnabled) debmes('Products produkt '.$product.' adding to created uncnoun');
}
$this->mode='update';
$this->tab=='';
$title = $product;
global $qty;
$qty = 1;
$addpr = array();
$this->edit_products($addpr, 0);
$this->addToList($addpr['ID']);
if($debugEnabled) debmes('Products produkt '.$product.' not found, added to category id '.$srch['CATEGORY_ID']);
}
}
}
}
}
Суть и применение функции:
В шаблонах поведения делаем к примеру
При срабатывании:
Код: Выделить всё
say("Что именно закончилось из продуктов?",2);
контекст:
В контексте выполнить при совпадении:
Код: Выделить всё
say("Добавляю ".$matches[1]." в список покупок.");
include_once(DIR_MODULES . 'app_products/app_products.class.php');
$prod = new app_products();
$prod->addToListFromVoice($matches[1]);
В список покупок попадают все найденные продукты.
Если какой либо продукт не находиться, то он добавляется в категорию "Неотсортированные".
Ну и если такой категории нет, то она сначала создасться и тот новый продукт, которого доселе небыло, добавиться в нее.
По сути чего yе хватает для счастья, может кто доработает. Всего лишь 2 пункта:
Поиск происходит "дословно", другими словами если в продуктах есть "хлеб" а вы сказали надо купить "хлеба" то добавиться дубликат по смыслу но не по содержанию. Т.Е. в продуктах будет как "хлеб" так и "хлеба" . Как я понимаю такое поможет исключить phpmorphy
Ну и вторая, более заморочная хотелка, уже
описывал недавно тут. Я про "хлеб белый" и "белый хлеб" к примеру. Опять же, как понимаю, phpmorphy поможет решить задачку.
Я так совсем много времени убью разбираться как это сделать.