Делаете через JQuery autocomplete запрос через аякс на обработчик
Обработчик должен проверить -- есть ли такой артикул и если есть -- подсветить
Для этого нужен метод в классе api/Variants.php, который бы по sku искал бы наличие записи...
НУ или заблочить кнопку "Сохранить" там уже как угодно...
Максим Федоров, А как узнать есть ли артикул? Я просто впервые с симпла работаю и не понимаю как тут всё устроено. Как обратиться к списку артикулов и перебрать их?
graf45231,
напишите метод в классе api/Variants.php
public function check_item_by_sku($id) : bool
{
// Тут запрос в БД, который запросит по id в таблице s_variants записи
// если есть запись -> верните true или false
}
Максим Федоров, ну это я сделал, но как мне в обработчике обратиться к этому методу? Просто насколько я понимаю это делается как то через класс Simpla. Но как через класс Simpla обратиться к методу класса Variant? На данный момент у меня готовый метод в классе Variants и на input'е висит обработчик который не знает куда и как посылать запрос.
Вот мой метод
public function check_sku($id)
{
if(empty($id))
return true;
$query = $this->db->placehold("SELECT v.sku FROM s_variants v WHERE v.sku ===".$id);
$this->db->query($query);
$variant = $this->db->result();
if(empty($variant))
return true;
return false;
}
Просто я сторонник написаний с нуля. Всё пишу сам, без CMS и стараюсь делать всё максимально очевидно, а тут как то всё запутанно, да и в интернете никому такая задача не нужна была(как минимум я не нашёл). Поэтому даже примеров не могу найти
Но как через класс Simpla обратиться к методу класса Variant?
в любом готовом классе View так: $this->variants->check_sku(intval($id))
Если обработчик как-то сами сделали, то нужно создать объект Simpla и и обратиться уже:
$simpla = new Simpla();
$skuIsAvailable = $simpla->variants->check_sku(intval($id))
По коду исправления:
У вас метод возвращает false, если есть объект и возвращает true, если его нет -- должно быть наоборот, либо поставьте восклицательный знак перед empty()
В запрос не рекомендуется вставлять переменную, тк SQL инъекцию можно сделать...
Тем более метод placehold() как раз и нужен для подготовки корректного запроса, сделайте так:
$query = $this->db->placehold('
SELECT v.sku
FROM s_variants v
WHERE v.sku =?', intval($id));
Всё пишу сам, без CMS и стараюсь делать всё максимально очевидно, а тут как то всё запутанно
Ну это уже ваше дело... Симпла очень простая и логичная... там и разбираться не чему
Зато есть общий подход и разные разработчики могут обмениваться опытом, делать понятные другим решения, а то что у вас -- неизвестное где-то :):):):)
К слову Симпла уже очень старая, во многих местах кривая и недоработання в сравнении с феймворками