Kopia bazy danych z procedurami (mysqldump)
Kopia plików wraz z ukrytymi (tar)
Czytaj dalej Kopia projektu – tar
Autor: jornathan
Trigger – powiązane tabele
Trigger powiązany jest z tabelą, pozwala na automatyzację i sprawdzanie danych:
- wylicza pola pochodne np. oblicza brutto z netto i vat, wiek z daty urodzenia
- sprawdza poprawność zakresu np. 0 – 100%
- może operować na innych tabelach
API NBP
Pobiera kurs NBP i wypełnia pole w aplikacji
Formatowanie wartości finansowych
Entity – usuwanie spacji, zamiana przecinków na kropki
protected function _setNetto($netto) { $netto = str_replace(',', '.', $netto); return trim($netto); } protected function _setBrutto($brutto) { $brutto = str_replace(',', '.', $brutto); return trim($brutto); }
Kontroler – pobieranie sumy pozycji
$query = $this->Invoices->find(); $query->enableAutoFields() ->select([ 'total_netto' => $query->func()->sum('Positions.netto'), 'total_brutto' => $query->func()->sum('Positions.brutto'), 'total_pos' => $query->func()->count('Positions.id') ]); $query->leftJoinWith('Positions'); $query->group(['Invoices.id']); $query->order(['Invoices.id' => 'DESC']) ->all();
View /
<?= number_format($brutto, 2, ".", " ") ?>
PHP moduł OCR
Korzystanie z Modułu OCR
Npm – Yearn – React – instalacja
Jeśli jest zainstalowany npm
# npm install --global yarn # yarn --version Errors brak dostępu z powodu niepodpisanego skryptu
belongsToMany – multiple checkboxes
Powiązanie belongsToMany w postaci checkbox-ów. Tabele users – recommendations_users – recommendations
Redis – Node – komunikat z serwera
Konfiguracja redis, redis-connect w node
const {createClient} = require("redis") let redisClient = createClient({ url: 'rediss://alice:alicePassword@redis.server:6379', logErrors: true }) redisClient.connect().catch(console.error)
const RedisStore = require("connect-redis").default let redisStore = new RedisStore({ client: redisClient, prefix: "myapp:", })
Klawisze funkcyjne / multimedialne
Jeśli klawisze funkcyjne F1, F2, … działają dopiero po wciśnięci przycisku Fn – a bez wciśnięcia działają klawisze multimedialne można to przełączyć sekwencją:
Fn + Esc
Redis @list
Listy – tablice (indeksowane) ciągów znaków: help @list
# LPUSH users 'ala' - wstawia na początku tablicy users osobę ala # RPUSH users 'ola' - wstawia na końcu tablicy osobę ola # LRANGE users 0 -1 - pobiera wszystkie elementy od indeksu 0 do końca tablicy (-1) 1) "ala" 2) "ola"
cakephp 4 – przekierowanie z parametrami query
return $this->redirect(['action' => 'rcp', '?' => $this->request->getQueryParams()]);
Zamiana przecinka na kropkę w polach finansowych
Javascript – parseFloat nie akceptuje przecinka ’,’
netto = parseFloat( ($(this).val()).replace(',', '.') ); $("#netto").val( netto.toFixed(2) )
cakephp 4 – zamiana przecinków na kropki -automat
Wartości finansowe typu decimal(10, 2):
class InvoicePosition extends Entity { protected function _setNetto($netto) { return str_replace(',', '.', $netto); // zamienia przecinki na kropki w Invoices.netto } }
Javascript – parseFloat nie akceptuje przecinka ’,’
netto = parseFloat( ($(this).val()).replace(',', '.') ); $("#netto").val( netto.toFixed(2) )
Czytaj dalej cakephp 4 – zamiana przecinków na kropki -automat
cakePhp 4 – dodawanie rekordów do ResultSet
Pobraliśmy wyniki Model->find() w postaci ResultSet. Jak dodać kolejny ResultSet?
Ajax -onKeyUp – filter table rows
Filtrowanie wierszy tabeli – dopasowanie do 2 kolumn
Ajax – cakephp4 – onKeyUp – wyszukiwanie projektów po nazwie
Wyszukiwanie projektów po numerze (ciąg znaków) Ajax Czytaj dalej Ajax – cakephp4 – onKeyUp – wyszukiwanie projektów po nazwie
GUS API
Konfiguracja i przykład użycia w CakePHP 4 – pakiet gusapi/gusapi v.6.1.1 Czytaj dalej GUS API
cakePHP – dociągnięcie modelu powiązanego
mmm
$quest = $this->Questionnaires->get($id, [ 'contain' => [ 'Answers', 'Creators' => function($q) { return $q->select(['id', 'firstname', 'lastname']); }] ]); // Dociągamy dodakowe modele dla uprawnionych if($this->hasAccess()) { $this->Questionnaires->loadInto($quest, [ 'Projects' => function($q) { return $q->select(['id', 'manager_id']); } ]); }
cakePHP – beforeSave
CompaniesTable,
$this == Companies, $this->Projects - powiązana tabela
use Cake\Event\EventInterface; use Cake\Database\Expression\QueryExpression; class CompaniesTable extends Table { public function beforeSave(EventInterface $event, $entity, $options) { // zmienione pole manager_id if($entity->isDirty('manager_id')) { $entity->prev_manager_id = $entity->getOriginal('manager_id') ; // pole przed zmianę // podstawienie innej kolumny, wyrażenia $set_prev_manager_id = new QueryExpression('prev_manager_id = manager_id'); $this->Projects->updateAll( [ $set_prev_manager_id, 'manager_id' => $entity->manager_id ], [ 'company_id' => $entity->id ] ); } }
mysql – UPDATE xxxx INNER JOIN
Aktualizuje rekordy powiązane z inną tabelą
UPDATE projects p INNER JOIN companies c ON c.id=p.company_id SET p.manager_id = c.manager_id WHERE c.manager_id <> p.manager_id AND (p.prev_manager_id <> p.manager_id OR p.prev_manager_id IS NULL); AND c.manager_id = 1023;
JS – DATE
Znacznik czasu:
var start_date = $('#start-date').val(); // 2023-02-19 var end_date = $('#end-date').val(); // 2023-02-20 const start_tz = Date.parse(start_date); // const end_tz = Date.parse(end_date); // if(end_tz < start_tz) { alert('Błędna data zakończenia. Popraw !!!'); $('#end-date').val(''); }
Mysql – sortowanie ciągu znaków jako INT
Sortowanie po 3 kategoriach. Ostatnia kategoria jest typu znakowego ale przechowuje numery np. 5, 5a, 5b, 6, 6a. Chcemy sortować tak jak liczby
$query->order(['Procedures.proc_type_id', 'Procedures.proc_category_id']); -- numer jest polem typu varchar, wartości: 5, 5a, 5b, 6, 6a ... $query->orderAsc( function($exp, $q) { return $q->func()->cast('numer','UNSIGNED'); });
SPF, DCIM – wpisy ochrony antyspamowej
Google wrzuca do spamu maile bez rekordu SPF
Czytaj dalej SPF, DCIM – wpisy ochrony antyspamowej
Aruba powiększenie przestrzeni
PHP 8.2 instalacja
QR code – cakephp 4
Integracja QR code z cakephp 4
Źródło: https://sourceforge.net/projects/phpqrcode/
Czytaj dalej QR code – cakephp 4
cakephp 4 – DebugKit
Instalacja i konfiguracja
cakephp 4 – Theme
Dodawanie szablonu HTML5 pobranego z zewnątrz
d3js 7 – zasoby
CDN:
<script src="https://d3js.org/d3.v7.min.js"></script>
www download tgz: https://d3js.org/
dokumentacja: https://github.com/d3/d3/wiki
git – .gitignore + cakephp 4
Jakie pliki wrzucić co .gitignore?
Oficjalna wersja pliku na github – zobacz