# Praca ze skryptami ¶

> Uwaga: Ta sekcja nie została jeszcze ukończona.

### Rejestrowanie skryptów ¶

Dzięki obiektowi View możesz rejestrować skrypty w aplikacji. Przeznaczone są do tego dwie dedykowane metody: registerJs() dla skryptów wbudowanych oraz registerJsFile() dla skryptów zewnętrznych. Skrypty wbudowane są przydatne przy konfiguracji oraz dynamicznym generowaniu kodu. Możesz dodać je w następujący sposób:

    $this->registerJs("var options = " . json_encode($options) . ";", View::POS_END, 'my-options');

Pierwszy argument przekazywany do metody `registerJs` to kod JavaScript, który chcemy umieścić na stronie. Jako drugi argument wskazujemy miejsce, w którym skrypt ma zostać umieszczony na stronie. Możliwe wartości to:

- POS_HEAD dla sekcji `head`.
- POS_BEGIN zaraz po otwarciu tagu `<body>`.
- POS_END zaraz przed zamknięciem tagu `</body>`.
- POS_READY do wywołania kodu z użyciem zdarzenia `ready` na dokumencie. Ta opcja zarejestruje automatycznie jQuery
- POS_LOAD do wywołania kodu z użyciem zdarzenia `load` na dokumencie. Ta opcja zarejestruje automatycznie jQuery

Ostatnim argumentem jest unikalne ID skryptu, które jest używane do zidentyfikowania bloku kodu i zastąpienia go, jeśli taki został już zarejestrowany. Jeśli ten argument nie zostanie podany, kod JavaScript zostanie użyty jako ID.

Skrypt zewnętrzny może zostać dodany następująco:

    $this->registerJsFile('https://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::class]]);

Argumenty dla metod registerCssFile() są podobne do registerJsFile(). W powyższym przykładzie, zarejestrowaliśmy plik `main.js` z zależnością od `JqueryAsset`. Oznacza to, że plik `main.js` zostanie dodany PO pliku `jquery.js`. Bez określenia tej zależności, względny porządek pomiędzy `main.js` a `jquery.js` nie zostałby zachowany.

Tak jak i w przypadku registerCssFile(), mocno rekomendujemy, abyś użył assetów do zarejestrowania zewnętrznych plików JS zamiast używania registerJsFile().

### Rejestracja assetów ¶

Jak zostało wspomniane wcześniej, korzystniejsze jest stosowanie assetów, zamiast kodu CSS i JS bezpośrednio (po informacje na ten temat sięgnij do sekcji menedżera assetów). Korzystanie z już zdefiniowanych pakietów jest bardzo proste:

    \frontend\assets\AppAsset::register($this);

### Rejestrowanie kodu CSS ¶

Możesz zarejestrować kod CSS przy użyciu metody registerCss() lub registerCssFile(). Pierwsza z nich rejestruje blok kodu CSS, natomiast druga zewnętrzny plik `.css`. Dla przykładu:

    $this->registerCss("body { background: #f00; }");

Powyższy kod doda kod CSS do sekcji `head` strony:

    <style>
    body { background: #f00; }
    </style>

Jeśli chcesz określić dodatkowe właściwości dla tagu `style`, przekaż tablicę `nazwa => wartość` jako drugi argument. Jeśli chcesz się upewnić, że jest tylko jeden tag `style`, użyj trzeciego argumentu, tak jak zostało to opisane dla meta tagów.

    $this->registerCssFile("https://example.com/css/themes/black-and-white.css", [
        'depends' => [BootstrapAsset::class],
        'media' => 'print',
    ], 'css-print-theme');

Kod powyżej doda link w sekcji `head` strony do pliku CSS.

- Pierwszy argument określa, który plik ma zostać zarejestrowany,
- Drugi argument określa atrybuty tagu `<link>`. Opcja `depends` jest obsługiwana w specjalny sposób, od niej zależy położenie pliku CSS. W tym przypadku, plik link do pliku CSS zostanie umieszony ZA plikami CSS w BootstrapAsset,
- Ostatni argument określa ID identyfikujące ten plik CSS. W przypadku jego braku, zostanie użyty do tego celu adres URL pliku CSS.

Jest mocno wskazane używanie assetów do rejestrowania zewnętrznych plików CSS. Użycie ich pozwala Ci na łączenie i kompresowanie wielu plików CSS, które jest wręcz niezbędne na stronach internetowych o dużym natężeniu ruchu.