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

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


nyanorm

Розбіжності

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

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

Порівняння попередніх версійПопередня ревізія
Наступна ревізія
Попередня ревізія
nyanorm [2023/06/16 13:22] – [О очистке параметров] nightflynyanorm [2023/06/16 13:46] (поточний) – [Що ще?] nightfly
Рядок 123: Рядок 123:
  
 Що дасть нам цілком собі ідентичний результат. Але не красиво ж, правда? Що дасть нам цілком собі ідентичний результат. Але не красиво ж, правда?
-===== Про очистку параметрів =====+===== Про очищення параметрів =====
  
 Слід, до речі, зауважити, що після виконання методів типу getAll(), delete() і їм подібних. Усі раніше встановлені вами параметри моделей, як-от where, limit, order, data будуть скинуті. Це зроблено з метою безпеки. Наприклад ось вибираєте ви ці платежі, розглядаєте їх, а потім, уже забувши, що ви це робили кількома екранами коду вище, ви вирішили з якоїсь причини зробити delete(). І все. Вам результат не сподобався. Саме тому за замовчуванням відбувається автоматичне очищення цих параметрів. Метод delete(), наприклад, також своєю чергою нічого не робить без зазначених явно where і кидається на вас винятками. Слід, до речі, зауважити, що після виконання методів типу getAll(), delete() і їм подібних. Усі раніше встановлені вами параметри моделей, як-от where, limit, order, data будуть скинуті. Це зроблено з метою безпеки. Наприклад ось вибираєте ви ці платежі, розглядаєте їх, а потім, уже забувши, що ви це робили кількома екранами коду вище, ви вирішили з якоїсь причини зробити delete(). І все. Вам результат не сподобався. Саме тому за замовчуванням відбувається автоматичне очищення цих параметрів. Метод delete(), наприклад, також своєю чергою нічого не робить без зазначених явно where і кидається на вас винятками.
Рядок 142: Рядок 142:
 Помітили, як ненав'язливо ми вам показали, які ще параметри (кумулятивні структури) у моделей бувають? Так? ;) Помітили, як ненав'язливо ми вам показали, які ще параметри (кумулятивні структури) у моделей бувають? Так? ;)
  
-===== Удаление данных ===== +===== Видалення даних ===== 
-Вы не поверите. Все настолько же линейно и просто. Давайте будем удалять запись из таблички abstractdevices с id 666?+ 
 +Ви не повірите. Усе настільки ж лінійно і просто. Давайте будемо видаляти запис із таблички abstractdevices з id 666?
  
 <code php> <code php>
Рядок 151: Рядок 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>
Рядок 173: Рядок 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();
Рядок 200: Рядок 203:
  
  
-===== Включение режима отладки ===== +===== Увімкнення режиму відлагодження ===== 
-Мы знаем. Вы привыкли использовать для отладки ваших модулей всякие print_r/debarr. Все, отвыкаем. Теперь можно легко и непринужденно включить режим отладки или глубокой отладки и получить нормальный лог и вывод всего происходящего с моделью.+ 
 +Ми знаємо. Ви звикли використовувати для налагодження ваших модулів усілякі print_r/debarr. Усе, відвикаємо. Тепер можна легко і невимушено увімкнути режим налагодження або глибокого налагодження і отримати нормальний лог і виведення всього, що відбувається з моделлю.
  
 <code php> <code php>
Рядок 207: Рядок 211:
 </code> </code>
  
-Все, теперь все запросы к БД будут выводиться прямо в ваш умолчательный вью, а также записываться вместе с временем в лог, который вы сможете смотреть реалтайм методом+Усе, тепер усі запити до БД виводитимуться прямо у ваш стандартний в'ю, а також записуватимуться разом із часом у дебаг-лог, який ви зможете дивитися реалтайм методом
  
 <code bash> <code bash>
Рядок 213: Рядок 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` (
Рядок 244: Рядок 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'));
Рядок 260: Рядок 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'));
Рядок 285: Рядок 295:
 } }
  
-//Показываем существующие задачи которые нам нужно сделать. +//Показуємо наявні завдання, які нам потрібно зробити. 
-$todo->orderBy('id', 'DESC'); //хотим сортировку от свежим к древним +$todo->orderBy('id', 'DESC'); //хочемо сортування від свіжих до древніх 
-$allTodos = $todo->getAll(); //достаем вообще все что видим из модели.+$allTodos = $todo->getAll(); //дістаємо взагалі все, що бачимо з моделі.
  
 if (!empty($allTodos)) { if (!empty($allTodos)) {
Рядок 296: Рядок 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);
Рядок 302: Рядок 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.1686910974.txt.gz · Востаннє змінено: повз nightfly

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki