forked from samdark/yiiframework_ru_cookbook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcore.assets.txt
144 lines (108 loc) · 7.48 KB
/
core.assets.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Ресурсы
=======
Yii имеет встроенный механизм публикации ресурсов (asset). Он полезен в следующих случаях:
- При оформлении кода как расширения, ресурсы которого содержатся в той же папке, что и код.
- При использовании ресурсов за корнем вебсервера.
- Для обработки ресурсов непосредственно перед публикацией. Например, сжатия CSS и JavaScript.
- При использовании одного и того же ресурса множеством компонент (для исключения дубликатов).
> Note|Примечание: Для работы с ресурсами в корне вебсервера должна быть создана папка `assets` с правами
на запись для PHP.
Публикацией ресурсов активно пользуется сам фреймворк. Происходит это, например,
при использовании [CLinkPager] или [CGridView].
Что находится в папке assets?
-----------------------------
После нескольких запусков приложения в `assets` образуется примерно следующее содержимое:
~~~
assets
1a6630a0\
main.css
2bb97318\
pager.css
4ab2ffe\
jquery.js
…
~~~
Папки вида `1a6630a0` создаются для предотвращения конфликта имён ресурсов.
Здесь `1a6630a0` — хеш от полного пути к папке, в которой размещён
подключаемый ресурс.
> Tip|Подсказка: Получить текущий или задать новый полный путь к папке
> `assets` можно при помощи `Yii::app()->assetManager->basePath`,
> а URL при помощи `Yii::app()->assetManager->baseUrl`.
Публикация ресурсов
-------------------
Для публикации ресурса или папки с ресурсами используется метод
[CAssetManager::publish], принимающий следующие параметры:
- `$path` — путь к ресурсу или папке с ресурсами.
- `$hashByName` — сохранять ли один и тот же хэш при нескольких публикациях. Полезно
при использовании ресурса несколькими компонентами. По умолчанию равен `false`.
- `$level` — уровень вложенности при копировании папки. При -1 копирует всё. При 0 — только файлы в корневой папке.
- `$forceCopy` — копировать ресурс даже если он уже опубликован. Удобно использовать
во время разработки задав значение как YII_DEBUG. Не рекомендуется использовать
на живом проекте, так как производительность падает.
Возвращается абсолютный URL опубликованного ресурса.
> Note|Примечание:
> При публикации отдельного ресурса, во избежание ненужного копирования проверяется
> время его модификации. При обновлении ресурса автоматически происходит его перепубликация.
>
> При публикации папки, её содержимое копируется рекурсивно. При этом метод проверяет
> только наличие папки с таким же именем, но не отдельных ресурсов. То есть при изменении
> ресурсов в этой папке её содержимое заново опубликовано не будет.
Примеры публикации и подключения ресурсов
-----------------------------------------
### JavaScript
~~~
[php]
Yii::app()->clientScript->registerScriptFile(
Yii::app()->assetManager->publish(
Yii::getPathOfAlias('ext.myExtension.assets').'/main.js'
),
CClientScript::POS_END
);
~~~
> Tip|Подсказка: вместо `Yii::app()->assetManager->publish()` можно использовать
его синоним `CHtml::asset()`.
### CSS
~~~
[php]
Yii::app()->clientScript->registerCssFile(
Yii::app()->assetManager->publish(
Yii::getPathOfAlias('ext.myExtension.assets').'/main.css'
)
);
~~~
### Изображение
~~~
[php]
$url = Yii::app()->assetManager->publish(
Yii::getPathOfAlias('ext.myExtension.assets').'/image.png'
);
echo CHtml::image($url);
~~~
Получение путей и URL к уже опубликованным ресурсам
---------------------------------------------------
Для получения пути или URL опубликованного ресурса можно воспользоваться
[CAssetManager::getPublishedPath] и [CAssetManager::getPublishedUrl] соответственно.
Методы принимают два параметра:
- `$path` — путь к публикуемому ресурсу.
- `$hashByName` — сохранять ли один и тот же хэш при нескольких публикациях. Полезно
при использовании ресурса несколькими компонентами. По умолчанию равен `false`.
Если указанный ресурс не опубликован, возвращается `false`.
Размер папки assets и её очистка
--------------------------------
Фреймворк не очищает папку `assets`, так что при длительной разработке в ней может
скопиться довольно много ресурсов. В том числе и тех, которые больше не используются.
Очищать папку `assets` полностью безопасно и даже рекомендуется это делать при
обновлении фреймворка.
Полезные ссылки
---------------
### API
- [CClientScript].
- [CAssetManager].
- [CHtml::asset].
### Расширения
- [extendedclientscript](http://www.yiiframework.com/extension/extendedclientscript/) — собирает CSS и JavaScript в один файл, сжимает их при помощи [JSMin](http://www.crockford.com/javascript/jsmin.html) и [CSSTidy](http://csstidy.sourceforge.net/).
- [cclientscriptminify](http://www.yiiframework.com/extension/cclientscriptminify/) — то же при помощи [minify](http://code.google.com/p/minify/).
- [haml-and-sass](http://www.yiiframework.com/extension/haml-and-sass/) — конвертирует [Sass](http://sass-lang.com/) в CSS при публикации. Также позволяет использовать [Haml](http://haml-lang.com/).
---
- `Автор`: Александр Макаров, Sam Dark ([rmcreative.ru](http://rmcreative.ru/))
- `Обсуждение и комментарии`: [http://yiiframework.ru/forum/viewtopic.php?f=8&t=1245](http://yiiframework.ru/forum/viewtopic.php?f=8&t=1245)