Користувальницькькі налаштування

Налаштування сайту


nyanorm

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Наступна ревізія
Попередня ревізія
nyanorm [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
nyanorm [2023/06/16 13:46] (поточний)
nightfly [Що ще?]
Рядок 1: Рядок 1:
-====== Уровень абстракции NyanORM ======+====== Рівень абстракції NyanORM ======
  
-===== Зачем все это? =====+===== Навіщо це все? =====
 {{:nyanorm.gif? |}} {{:nyanorm.gif? |}}
  
-Делает НЯКУ с вашей базойИ предоставляет очень удобные средствачтобы вы прилагали минимум усилий и мозговых извилин при работе с БД Ubilling. Вы сможете описывать ваши модели данных, и работу с ними, больше не рисуя в ручную SELECT FROM `tablename`... и прочие осточертевшие вам конструкции. Также NyanORM возьмет на себя всю вашу рутинную работу по предварительной подготовке и трансформации ваших данных. Задачей NyanORM **не является** быть всеобъемлющим монстром реализующим все возможные кейсы работы с вашими данными. Изначально он задумывался для того, чтобы сократить объемы рутинного, скучного и однотипного кодаиз которого состоит работа с сущностями в 90-95% прикладных модулейСобственно только эти кейсы он и должен перекрывать, не накладывая на вас никаких дополнительных ограничений.+Робить НЯКУ з вашою базоюІ надає дуже зручні засобищоб ви докладали мінімум зусиль і мозкових звивин при роботі з БД Ubilling. Ви зможете описувати ваші моделі даних, і роботу з ними, більше не малюючи в ручну SELECT `something` FROM `tablename`... та інші остогидлі вам конструкції. Також NyanORM візьме на себе всю вашу рутинну роботу з попередньої підготовки і трансформації ваших даних. Завданням NyanORM **не бути** всеосяжним монстром, який реалізує всі можливі кейси роботи з вашими даними. Завданням NyanORM є - бути простим та зручним. З самого початку, він задумувався для того, щоб скоротити обсяги рутинного, нудного й однотипного коду, з якого складається робота із сутностями в 90-95% прикладних модулівВласне тільки ці кейси він і повинен перекривати, не накладаючи на вас жодних додаткових обмежень.
  
-===== Особенности ===== +===== Особливості =====
-Почему именно NyanORM а не любая другая сторонняя библиотека с приставкой ORM в названии? А по следующим причинам: +
-  +
-  * Не накладывает никаких ограничений на именование табличек БД. +
-  * Не диктует никаких условий по полям и содержанию этих табличек. +
-  * Позволяет без проблем работать с уже существующими структурами данных. +
-  * Позволяет миксовать код как с его использованием так и в старом стиле. +
-  * Не требует долгого и муторного описания моделей перед тем как начать работать. +
-  * Идеален для сверхбыстрого прототипирования бизнес-логики прикладных модулей. +
-  * Доступен в любой момент и всегда из любого вашего модуля. +
-  * Написан в насколько это возможно минималистском стиле с максимальным использованием существующих механик Ubilling. +
-  * Минимизирует оверхеды по памяти и коллбекам. Но это не точно. +
-  * Позволяет наследованием модифицировать как угодно любую модель и методы работы с ней вообще никак себя не ограничивая. +
-  * Не предоставляет никаких требований и средств по фильтрации данных. Вы можете использовать вообще что захотите. +
-  * Работает одинаково отлично на PHP5 и PHP7. Легаси да. +
-  * Максимально очевидный синтаксис и механики требующие для своего понимания минимального уровня IQ. +
-  * Зашкаливающий уровень кавая.+
  
-К сожалению, мы не нашли ни одного существующего решениясоответствующего всем особенностям/требованиям выше. Это сэкономило бы нам очень много усилий и временино нет. Поэтому NyanORM. + Чому саме NyanORM, а не будь-яка інша стороння бібліотека з приставкою ORM у назві? А з таких причин
 + 
 +  * Не накладає жодних обмежень на іменування табличок БД. 
 +  * Не диктує жодних умов щодо полів і вмісту цих табличок. 
 +  * Дозволяє без проблем працювати з уже наявними структурами даних. 
 +  * Дозволяє міксувати код як з його використанням так і в старому стилі. 
 +  * Не вимагає довгого і клопіткого опису моделей, десь в окремому місці, перед тим як почати працювати. 
 +  * Ідеальний для надшвидкого прототипування бізнес-логіки прикладних модулів. 
 +  * Доступний у будь-який момент і завжди з будь-якого вашого модулю. 
 +  * Написаний у наскільки це можливо мінімалістичному стилі з максимальним використанням наявних механік Ubilling. 
 +  * Мінімізує оверхеди за пам'яттю і коллбеками. Але це не точно. 
 +  * Дозволяє наслідуванням модифікувати як завгодно будь-яку модель і методи роботи з нею, взагалі ніяк себе не обмежуючи. 
 +  * Не виставляє жодних вимог і засобів щодо фільтрації даних. Ви можете використовувати взагалі що захочете. 
 +  * Працює однаково відмінно на PHP5 і PHP7 та на PHP8. Легасі так. 
 +  * Максимально очевидний синтаксис і механіки вимагають для свого розуміння мінімального рівня IQ. 
 +  * Зашкалюючий рівень каваю. 
 + 
 +На жаль, ми не знайшли жодного наявного рішення, що відповідає **всім** особливостям/вимогам вищеЦе заощадило б нам дуже багато зусиль і часу, але ні. Тому NyanORM. 
 \\ \\
 \\ \\
-Если вам будет так спокойнее, то мы вдумчивопосмотрели на то как работают Eloquent, Hibernate, Doctrine, Propel, RedBean... и сделали наоборот+Якщо вам буде так спокійніше, то ми вдумливо подивилися на те, як працюють Eloquent, Hibernate, Doctrine, Propel, RedBean... і зробили навпаки
-===== Это обязательно использовать? ===== +===== Це обов'язково використовувати? ===== 
-**Нет!** Никто вас ни в чем не ограничивает и не заставляет использовать что-либо такое специфическое в вашем новом коде, и тем более даже не намекаетчто вы должны переписать весь ваш старый код с использованием этого объекта. Возможно вам просто понравится как может выглядеть ваш код без ручной сборки запросов к БД, и с использованием высокоуровневой абстракции.+ 
 +**Ні! ** Ніхто вас ні в чому не обмежує і не примушує використовувати будь-що таке специфічне у вашому новому кодіі тим паче навіть не натякаєщо ви маєте переписати весь ваш старий код з використанням цього обкта. Можливовам просто сподобається, який вигляд може мати ваш код без ручного збирання запитів до БД, і з використанням високорівневої абстракції. 
 + 
 + 
 +===== З чого почати? =====
  
 +Для прикладу, давайте розглянемо дуже типовий кейс. Нам потрібно отримати, наприклад, платежі за поточний рік, із сумою більше нуля і типом платежів "готівка". Також ми хочемо мати їх в асоціативному масиві, де ключем буде id платежу. Як це б виглядало в нашій старій реальності:
  
-===== С чего начать? ===== 
-Для примера, давайте рассмотрим очень типичный кейс. Нам нужно получить, например, платежи за текущий год, с суммой более нуля и типом платежей "наличка". Также мы хотим иметь их в ассоциативном массиве, где ключом будет id платежа. Как это бы выглядело в нашей старой реальности: 
 <code php> <code php>
 $query = "SELECT * from `payments` WHERE `summ`>'0' AND `date` LIKE '" . curyear() . "-%' AND `cashtypeid`='1'"; $query = "SELECT * from `payments` WHERE `summ`>'0' AND `date` LIKE '" . curyear() . "-%' AND `cashtypeid`='1'";
Рядок 47: Рядок 51:
 </code> </code>
  
-Правда знакомая конструкция? Осточертело, правда же? А теперь давайте тоже самое но красиво. Для начала нам нужна модель для таблички payments. Для этого мы либо наследуем базовую модель используя имя таблички как имя класса:+Правда знайома конструкція? Остогидло, правда ж? А тепер давайте теж саме, але красиво. Для початку нам потрібна модель для таблички payments. Для цього ми або успадковуємо базову модель, використовуючи ім'я таблички як ім'я класу: 
 <code php> <code php>
 class payments extends NyanORM {} class payments extends NyanORM {}
Рядок 53: Рядок 58:
 </code> </code>
  
-либо делаем то же самое с использованием <del>черной</del> магии+або робимо те саме з використанням <del>чорної</del> магії 
 <code php> <code php>
-$payments = new nya_payments(); //воу, здесь происходит магия ;)+$payments = new nya_payments(); //воу, тут відбувається магія ;)
 </code> </code>
  
-Да, все после префикса **nya_** будет развернуто в имя таблички as is и для нее будет автоматически сгенерирована модель.+Такусе після префіксу **nya_** буде розгорнуто в ім'я таблички as is і для неї буде автоматично згенеровано модель.
  
-Получаем все записи+отримуємо всі записи
 <code php> <code php>
-$allPayments=$payments->getAll(); //получаем все записи из модели+$allPayments=$payments->getAll(); //отримуємо всі записи з моделі
 </code> </code>
  
-Да. Это типа моделька для таблички payments в ловеркейсе. Также вы можете максимально прямолинейно выставить имя таблички с которой мы будем работать через конструктор класса. Например так:+ТакЦе типу моделька для таблички payments у ловеркейсі. Також ви можете максимально прямолінійно виставити ім'я таблички, з якою ми будемо працювати через конструктор класу. Наприклад так:
  
 <code php> <code php>
Рядок 72: Рядок 78:
 </code> </code>
  
-Мы чтоо отвлеклись. Короче модель у нас естьЧто там с нашим изначальным планом по выборке вполне конкретных платежей? А вот что:+Ми щось відволіклися. Коротше модель у нас єЩо там із нашим початковим планом щодо вибірки цілком конкретних платежів? А ось що: 
 <code php> <code php>
-class payments extends NyanORM { } // создаем модель наследованием, так как это лучше дружит с автокомплитом некоторых IDE +class payments extends NyanORM { } // створюємо модель наслідуванням, оскільки це краще дружить з автокомплітом деяких IDE 
-$payments = new payments(); // создаем объект модели +$payments = new payments(); // створюємо обкт моделі 
-$payments->where('summ', '>', '0'); //тут и дальше вешаем наши условия+$payments->where('summ', '>', '0'); //тут і далі вішаємо наші умови
 $payments->where('date', 'LIKE', curyear() . '%'); $payments->where('date', 'LIKE', curyear() . '%');
-$payments->where('cashtypeid', '=', '1'); // да, это наличка +$payments->where('cashtypeid', '=', '1'); // такце готівка 
-$rawPayments = $payments->getAll('id'); // автоматическая группировка по id+$rawPayments = $payments->getAll('id'); // автоматичне групування результату по id
 debarr($rawPayments); debarr($rawPayments);
 </code> </code>
  
-Давайте еще раз, на примере, но с чем то-другим. Пускай это будут свитчиИ пускай мы хотим просто получить все свитчи.+Давайте ще раз, на прикладі, але з чимось іншим. Нехай це будуть світчіІ нехай ми хочемо просто отримати всі світчі.
 <code php> <code php>
 $switches = new nya_switches(); $switches = new nya_switches();
Рядок 89: Рядок 96:
 </code> </code>
  
-Куда уже проще?+ну або якось так без чорної магії, в лоб: 
 +<code php> 
 +$switches = new NyanORM('switches'); 
 +$allSwitches = $switches->getAll(); 
 +</code> 
 + 
 +Куди вже простіше?
  
-===== О параметрах моделей =====+===== Про параметри моделей =====
  
-Как можно было заметить для установки параметров наших запросов к моделям мы можем использовать метод where() с тремя довольно очевидными параметрами. Также довольно очевидно, что несколько where() идущих последовательно будут сохранены в кумулятивных структурах и в дальнейшем интерпретированы как AND. А что если мы внезапно захотим кроме платежей с наличкой получать оные также с типом 4 (пускай это будут какие-то штуки из самообслуживания)? Очевидно, что мы хотим условие OR. А как его сделать? А очень просто.+Як можна було помітити, для встановлення параметрів наших запитів до моделей ми можемо використовувати метод where() з трьома досить очевидними параметрами. Також досить очевидно, що кілька where(), що йдуть послідовнобудуть збережені в кумулятивних структурах і надалі інтерпретовані як AND. А що якщо ми раптово захочемо крім платежів із готівкою отримувати їх також із типом 4 (нехай це будуть якісь штуки із самообслуговування)? Очевидно, що ми хочемо умову OR. А як її зробити? А дуже просто.
  
 <code php> <code php>
 $payments->where('cashtypeid', '=', '1'); $payments->where('cashtypeid', '=', '1');
-$payments->orWhere('cashtypeid','=','4'); //Ага, все настолько очевидно.+$payments->orWhere('cashtypeid','=','4'); //Ага, все настільки очевидно
 </code>  </code> 
  
-Также если нам очень захочется пописать кусочки запросов руками вспомнив старое, либо если хочется сделать что нибудь такое "эдакое" чего из коробки не понятно как сделать при помощи конструктора NyanORM вы можете использовать whereRaw('expression')/orWhereRaw('expression') например так:+Також якщо нам дуже захочеться пописати шматочки запитів руками, згадавши старе, або якщо хочеться зробити щось таке "таке"чого з коробки не зрозуміло, як зробити, за допомогою конструктора запитів NyanORM, тоді ви можете використовувати whereRaw('expression')/orWhereRaw('expression')наприклад так:
  
 <code php> <code php>
Рядок 109: Рядок 122:
 </code>  </code> 
  
-Что даст нам вполне себе идентичный результат. Но не красиво же, правда?+Що дасть нам цілком собі ідентичний результат. Але не красиво ж, правда? 
 +===== Про очищення параметрів =====
  
-===== О очистке параметров =====+Слід, до речі, зауважити, що після виконання методів типу getAll(), delete() і їм подібних. Усі раніше встановлені вами параметри моделей, як-от where, limit, order, data будуть скинуті. Це зроблено з метою безпеки. Наприклад ось вибираєте ви ці платежі, розглядаєте їх, а потім, уже забувши, що ви це робили кількома екранами коду вище, ви вирішили з якоїсь причини зробити delete(). І все. Вам результат не сподобався. Саме тому за замовчуванням відбувається автоматичне очищення цих параметрів. Метод delete(), наприклад, також своєю чергою нічого не робить без зазначених явно where і кидається на вас винятками.
  
-Следует кстати заметить, что после выполнения методов типа getAll(), delete() и им подобных. Все ранее установленные вами параметры моделей, такие как where, limit, order, data будут сброшены. Это сделано в целях безопасности. Например вот выбираете вы эти платежи, рассматриваете их, а потом, уже забыв, что вы это делали несколькими экранами кода выше, вы решили по какой-то причине сделать delete(). И все. Вам результат не понравился. Именно поэтому по-умолчанию происходит автоматическая очистка этих параметров. Метод delete(), например, также свою очередь ничего не делает без указанных явно where и бросается в вас исключениями. 
 \\ \\
-Если по какой-то причине, вы не хотите, чтобы происходила автоматическая очистка параметров моделей, вы можете установить параметр $flushParams этих очищающих методов в значение false.+Якщо з якоїсь причини, ви не хочете, щоб відбувалося автоматичне очищення параметрів моделей, ви можете встановити параметр $flushParams цих очищувальних методів у значення false.
 \\ \\
-Также в любой моментвы можете самостоятельно очистить состояние любых параметров конкретной модели использовав соответствующий сеттер со всеми пустыми параметрами. +Також у будь-який момент ви можете самостійно очистити стан будь-яких параметрів конкретної моделі, використавши відповідний сеттер з усіма порожніми параметрами. 
  
 <code php> <code php>
Рядок 127: Рядок 140:
 </code> </code>
  
-Заметили, как ненавязчиво мы вам показали какие еще параметры (кумулятивные структуры) у моделей бывают? Да? ;)+Помітили, як ненав'язливо ми вам показали, які ще параметри (кумулятивні структури) у моделей буваютьТак? ;)
  
-===== Удаление данных ===== +===== Видалення даних ===== 
-Вы не поверите. Все настолько же линейно и просто. Давайте будем удалять запись из таблички abstractdevices с id 666?+ 
 +Ви не повірите. Усе настільки ж лінійно і просто. Давайте будемо видаляти запис із таблички abstractdevices з id 666?
  
 <code php> <code php>
Рядок 138: Рядок 152:
 </code> </code>
  
-===== Кумулятивная структура data() =====+===== Кумулятивна структура data() =====
  
-Кумулятивная структура **data** предназначена для хранения данных которые будут в дальнейшем использованы при вызове методов **create()** или **save()**. Собственно имеет она только два параметра, а именно **field** и **value**. Довольно не трудно догадаться как ее использовать:+Кумулятивна структура **data** призначена для зберігання даних, які будуть надалі використані під час виклику методів **create()** або **save()**. Власне має вона лише два параметри, а саме **field** та **value**. Досить не важко здогадатися як її використовувати:
  
 <code php> <code php>
 $object->data('somefield', 'new value'); $object->data('somefield', 'new value');
-$object->data('anotherfield',оже какие-то данные');+$object->data('anotherfield', 'це теж типу якісь дані');
 </code> </code>
  
-===== Создание и изменение записей =====+===== Створення та зміна записів =====
  
-Помните кумулятивную структуру **data()**?  Она нам потребуется для создания записей в модели либо изменения существующих. Давайте создадим новую запись приблизительно для такой таблички:+Пам'ятаєте кумулятивну структуру **data()**?  Вона нам знадобиться для створення записів у моделі або зміни наявних. Давайте створимо новий запис приблизно для такої таблички:
  
 <code sql> <code sql>
Рядок 160: Рядок 174:
 </code> </code>
  
-Все очень прямолинейно.+Усе дуже прямолінійно.
  
 <code php> <code php>
 $object = new nya_someobjects(); $object = new nya_someobjects();
-$object->data('name', 'а это типа имя'); +$object->data('name', 'а це типу ім`я'); 
-$object->data('text', 'это типа текст записи');+$object->data('text', 'а це якби текст запису');
 $object->create(); $object->create();
 </code> </code>
  
-Заметьте, мы не указывали ручками NULL для автоинкрементного поля id, как так? А так, что у метода **create()** по умолчанию установлен параметр $autoAiId=true делающий это неявно. Если в вашей табличке нету автоинкрементного поля `id` или другого подобного primary key, вы должны установить этот параметр в false. Собственно имя поля главного ключа таблички вы всегда можете переназначить при помощи наследования. Он содержится в протектед проперти **defaultPk**.  +Зауважте, ми не вказували ручками NULL для автоінкрементного поля id, як так? А так, що у методу **create()** за замовчуванням встановлений параметр $autoAiId=true, який робить це неявно. Якщо у вашій табличці немає автоінкрементного поля `id` або іншого подібного primary key, ви маєте встановити цей параметр у false. Власне ім'я поля головного ключа таблички ви завжди можете перепризначити за допомогою наслідування. Він міститься в протектед проперті **defaultPk**.  
 \\ \\
 \\ \\
-Окей, запись создать мы создали, а как получить ее id? Для этого есть удобный метод **getLastId()** получающий последний **defaultPk** из таблички. +Окей, запис створити ми створили, а як отримати його id? Для цього є зручний метод **getLastId()**, який отримує останній **defaultPk** з таблички. 
-Вот как это работает:+Ось як це працює: 
 <code php> <code php>
-deb($object->getLastId()); // ой... возвращает 15+deb($object->getLastId()); // ой... повертає 15
 </code> </code>
  
-Окей, допустим мы внезапно захотели теперь изменить все или какое-то из полей в этой табличкекак бытьВсе точно так-же как и с **create()** только при помощи **save()** но теперь нам еще понадобиться **where()**. Допустим мы будем редактировать последнюю запись в этой табличке:+Окей, припустимо, ми раптово захотіли тепер змінити всі або якесь конкретне із полів у цій табличціяк бутиУсе точно так само, як і з **create()** тільки за допомогою **save()**, але тепер нам ще знадобитися **where()**. Припустимо ми будемо редагувати останній запис у цій табличці: 
 <code php> <code php>
 $idToModify=$object->getLastId(); $idToModify=$object->getLastId();
-$object->data('text', 'воуэто же новое значение для text!');+$object->data('text',гоце ж нове значення для text!');
 $object->where('id', '=', $idToModify); $object->where('id', '=', $idToModify);
 $object->save(); $object->save();
Рядок 187: Рядок 203:
  
  
-===== Включение режима отладки ===== +===== Увімкнення режиму відлагодження ===== 
-Мы знаем. Вы привыкли использовать для отладки ваших модулей всякие print_r/debarr. Все, отвыкаем. Теперь можно легко и непринужденно включить режим отладки или глубокой отладки и получить нормальный лог и вывод всего происходящего с моделью.+ 
 +Ми знаємо. Ви звикли використовувати для налагодження ваших модулів усілякі print_r/debarr. Усе, відвикаємо. Тепер можна легко і невимушено увімкнути режим налагодження або глибокого налагодження і отримати нормальний лог і виведення всьогощо відбувається з моделлю.
  
 <code php> <code php>
Рядок 194: Рядок 211:
 </code> </code>
  
-Все, теперь все запросы к БД будут выводиться прямо в ваш умолчательный вью, а также записываться вместе с временем в лог, который вы сможете смотреть реалтайм методом+Усе, тепер усі запити до БД виводитимуться прямо у ваш стандартний в'ю, а також записуватимуться разом із часом у дебаг-лог, який ви зможете дивитися реалтайм методом
  
 <code bash> <code bash>
Рядок 200: Рядок 217:
 </code> </code>
  
-Также вам может захотеться врубить режим глубокой отладки. Тогда в этот же лог, будет дампиться также состояние всей модели целиком на каждый чих. Делается это так:+Також вам може захотітися врубити режим глибокого відлагодження. Тоді в цей же лог, буде дампитися також стан всієї моделі цілком на кожен пчих. Робиться це так:
 <code php> <code php>
 $model->setDebug(true,true); $model->setDebug(true,true);
 </code> </code>
  
-===== О исключениях ===== +===== Про виключення =====
-Если вы совсем обнаглеете от вседозволенности NyanORM вам в лицо могут быть выброшены следующие исключения: +
-  * **MEOW_WHERE_STRUCT_EMPTY** - кумулятивная структура where пуста. А она нужна. Очень. +
-  * **MEOW_DATA_STRUCT_EMPTY** - кумулятивная структура data пуста. И она тоже кому-то очень нужна. +
-  * **MEOW_JOIN_WRONG_TYPE** - неверный тип JOIN. Допустимы только INNER, LEFT, RIGHT. +
-  * **MEOW_NO_FIELD_NAME** - не установлено обязательное имя поля.+
  
-===== Принципиальная схема ===== +Якщо ви зовсім знахабнієте від вседозволеності NyanORM вам в обличчя можуть бути викинуті такі винятки: 
-Это гдео вот настолько высокоуровневая штука.+ 
 +  * **MEOW_WHERE_STRUCT_EMPTY** - кумулятивна структура where порожня. А вона потрібна. Дуже. 
 +  * **MEOW_DATA_STRUCT_EMPTY** - кумулятивна структура data порожня. І вона теж комусь дуже потрібна. 
 +  * **MEOW_JOIN_WRONG_TYPE** - неправильний тип JOIN. Допустимі тільки INNER, LEFT, RIGHT. 
 +  * **MEOW_NO_FIELD_NAME** - не встановлено обов'язкове ім'я поля. 
 + 
 +===== Принципова схема ===== 
 + 
 +Це десь ось настільки високорівнева штука.
  
 {{:nyanorm_scheme0.png?|}} {{:nyanorm_scheme0.png?|}}
  
-Так что да, в модулях где скорость работы с данными может быть узким местом, возможно придется использовать более традиционный подход с использованием api.mysql. 
  
-===== Что еще? ===== +Тож так, у модулях, де швидкість роботи з даними може бути вузьким місцем, можливо, доведеться використовувати більш традиційний підхід із використанням api.mysql. 
-Короче вот пока что вам практические примеры использования этого в виде хеллоуворлда. Но так как я хеллоуворлды писать не умею, вот вам тудушка. Как говорят умные люди - не умеешь писать хеллоуворлды - пиши тудушки.+===== Що ще? ===== 
 + 
 +Коротше ось поки що вам практичні приклади використання цього у вигляді хеллоуворлда. Але оскільки я хеллоуворлди писати не вмію, ось вам тудушка. Як кажуть розумні люди - не вмієш писати хеллоуворлди - пиши тудушки. 
 + 
 + 
 +Працювати наш TODO-list буде на наступній табличці в БД:
  
-Работать наш TODO-list будет на следующей табличке в БД: 
 <code sql> <code sql>
 CREATE TABLE IF NOT EXISTS `todo` ( CREATE TABLE IF NOT EXISTS `todo` (
Рядок 231: Рядок 254:
 </code> </code>
  
-А вот и весь код нашего модуля:+А ось і весь код нашого модуля:
 <code php> <code php>
  
-$todo = new nya_todo(); // Создаем модель данных при помощи магии.  +$todo = new nya_todo(); //Створюємо модель даних за допомогою магії.  
-                       //Собственно todo после префикса nya_ это и есть наша табличка.+                       //Власне todo після префікса nya_ це і є наша табличка.
  
-$moduleBaseUrl = '?module=testing'; //базовый URL нашего модуля +$moduleBaseUrl = '?module=testing'; //базовий URL нашого модулю 
-$messages = new UbillingMessageHelper(); //хотим штатные красивые уведомления+$messages = new UbillingMessageHelper(); //хочемо штатні красиві повідомлення
 $result = ''; $result = '';
  
-//Рендерим формочку создания используя инлайновую сборку при помощи Astral.+//Рендеримо формочку створення, використовуючи інлайнову збірку за допомогою [[apiastral|Astral]].
 $inputs = wf_TextInput('newtasktext', __('Task'), '', false, 40); $inputs = wf_TextInput('newtasktext', __('Task'), '', false, 40);
 $inputs .= wf_Submit(__('Create')); $inputs .= wf_Submit(__('Create'));
Рядок 247: Рядок 270:
 show_window(__('Create new task'), $creationForm); show_window(__('Create new task'), $creationForm);
  
-//Ловим непустой newtasktext как сигнал для создания новой записи+//Ловимо непорожній newtasktext як сигнал для створення нового запису
 if (ubRouting::checkPost(array('newtasktext'))) { if (ubRouting::checkPost(array('newtasktext'))) {
-    //заполняем новыми данными структуру data предварительно отфильтровав их средствами ubRouting+    //заповнюємо новими даними структуру dataпопередньо відфільтрувавши їх засобами ubRouting
     $todo->data('text', ubRouting::post('newtasktext', 'mres'));     $todo->data('text', ubRouting::post('newtasktext', 'mres'));
-    $todo->create(); //говорим модели что "создайся запись" на основании структуры выше. +    $todo->create(); //кажемо моделі що "створи запис" на підставі структури вище. 
-    ubRouting::nav($moduleBaseUrl); //возвращаемся в морду модуля+    ubRouting::nav($moduleBaseUrl); //повертаємось у морду модуля
 } }
  
-//Ловим запрос на удаление тудушки, на сей раз GET-ом.+//Ловимо запит на видалення тудушки, цього разу GET-ом.
 if (ubRouting::checkGet('deletetodo')) { if (ubRouting::checkGet('deletetodo')) {
-    //выставляем параметр where в удаляемую id, предварительно убедившись, что это будет циферка+    //виставляємо параметр where у id, котра видаляється, попередньо переконавшись, що це буде циферка
     $todo->where('id', '=', ubRouting::get('deletetodo', 'int'));     $todo->where('id', '=', ubRouting::get('deletetodo', 'int'));
-    $todo->delete(); // говорим модели "удались"+    $todo->delete(); //кажемо моделі "вдалися"
     ubRouting::nav($moduleBaseUrl);     ubRouting::nav($moduleBaseUrl);
 } }
  
-//Ловим запрос на изменение существующей записи. Для сигнализации о начале ждем не пустой текст и айдишку.+//Ловимо запит на зміну наявного запису. Для сигналізації про початок чекаємо не порожній текст і айдишку.
 if (ubRouting::checkPost(array('edittodoid', 'edittodotext'))) { if (ubRouting::checkPost(array('edittodoid', 'edittodotext'))) {
-    //Дальше ведь все очевидно, правда? Выставляем где, выставляем чего поменять, фильтруем, говорим "сохранись".+    //Далі ж усе очевидно, правда? Виставляємо де, виставляємо, що поміняти, фільтруємо, говоримо "збережися".
     $todo->where('id', '=', ubRouting::post('edittodoid', 'int'));     $todo->where('id', '=', ubRouting::post('edittodoid', 'int'));
     $todo->data('text', ubRouting::post('edittodotext', 'mres'));     $todo->data('text', ubRouting::post('edittodotext', 'mres'));
Рядок 272: Рядок 295:
 } }
  
-//Показываем существующие задачи которые нам нужно сделать+//Показуємо наявні завдання, які нам потрібно зробити
-$todo->orderBy('id', 'DESC'); //хотим сортировку от свежим к древним +$todo->orderBy('id', 'DESC'); //хочемо сортування від свіжих до древніх 
-$allTodos = $todo->getAll(); //достаем вообще все что видим из модели.+$allTodos = $todo->getAll(); //дістаємо взагалі все, що бачимо з моделі.
  
 if (!empty($allTodos)) { if (!empty($allTodos)) {
Рядок 283: Рядок 306:
         $cells = wf_TableCell($each['text']);         $cells = wf_TableCell($each['text']);
         $actControls = wf_JSAlert($moduleBaseUrl . '&deletetodo=' . $each['id'], web_delete_icon(), $messages->getDeleteAlert());         $actControls = wf_JSAlert($moduleBaseUrl . '&deletetodo=' . $each['id'], web_delete_icon(), $messages->getDeleteAlert());
-        //Прямо тут, собираем формочку редактирования каждой задачи и пихаем ее в контролы.+        //Прямо тут, збираємо формочку редагування кожного завдання і пихаємо її в контроли.
         $editInputs = wf_HiddenInput('edittodoid', $each['id']);         $editInputs = wf_HiddenInput('edittodoid', $each['id']);
         $editInputs .= wf_TextInput('edittodotext', __('Text'), $each['text'], false, 40);         $editInputs .= wf_TextInput('edittodotext', __('Text'), $each['text'], false, 40);
Рядок 289: Рядок 312:
         $editForm = wf_Form('', 'POST', $editInputs, 'glamour');         $editForm = wf_Form('', 'POST', $editInputs, 'glamour');
         $actControls .= wf_modalAuto(web_edit_icon(), __('Edit'), $editForm);         $actControls .= wf_modalAuto(web_edit_icon(), __('Edit'), $editForm);
-        //Фу так делать.+        //Фу так робити.
         $cells .= wf_TableCell($actControls);         $cells .= wf_TableCell($actControls);
         $rows .= wf_TableRow($cells, 'row5');         $rows .= wf_TableRow($cells, 'row5');
nyanorm.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1