# Создание фоток
## SQL
``` sql
select "ID_ARTIST",
"NICKNAME",
"DESCRIPTION",
"MIMETYPE",
"FILENAME",
apex_util.prepare_url(
p_url => 'f?p=' || :app_id || ':5:' || :app_session || '::::P5_ID_ARTIST:' || ID_ARTIST
) icon_link,
decode(
nvl(dbms_lob.getlength(IMAGE), 0),
0,
null,
'<img alt=" ' || NICKNAME || ' " title=" ' || NICKNAME || ' " style="border: 2px;
-moz-border-radius: 4px; -webkit-border-radius: 4px;" ' || 'src=" ' || apex_util.get_blob_file_src('P5_IMAGE', ID_ARTIST) || ' " height="75"
width="75" />'
) detail_img,
apex_util.get_blob_file_src('P5_IMAGE', ID_ARTIST) detail_img_no_style
from "ARTISTS"
```
## Делаю
Для:
```sql
select "ID_ALBUM",
"NAME_ALBUM",
"DATE",
sys.dbms_lob.getlength("IMAGE") "IMAGE",
"MIMETYPE",
"FILENAME"
from "ALBUM"
```
Это:
```sql
select "ID_ALBUM",
"NAME_ALBUM",
"DATE",
"MIMETYPE",
"FILENAME",
apex_util.prepare_url(
p_url => 'f?p=' || :app_id || ':3:' || :app_session || '::::P3_ID_ALBUM:' || ID_ALBUM
) icon_link,
decode(
nvl(dbms_lob.getlength(IMAGE), 0),
0,
null,
'<img alt=" ' || NAME_ALBUM || ' " title=" ' || NAME_ALBUM || ' " style="border: 2px;
-moz-border-radius: 4px; -webkit-border-radius: 4px;" ' || 'src=" ' || apex_util.get_blob_file_src('P3_IMAGE', ID_ALBUM) || ' " height="75"
width="75" />'
) detail_img,
apex_util.get_blob_file_src('P3_IMAGE', ID_ALBUM) detail_img_no_style
from "ALBUM"
```
<!--
Музыка:
```sql
select
MUSIC.ID,
sys.dbms_lob.getlength("TRACK")"TRACK",
"BTRACK",
"MIMETYPE",
"FILE_NAME",
"LAST_UPDATE",
apex_util.prepare_url(p_url=>'f?p='||:app_id||':25:'||:app_session||
'::::P25_ID:'|| MUSIC.ID) track_link,
decode(nvl(dbms_lob.getlength(TRACK),0),0,null,
'<audio controls > <source src="' || apex_util.get_blob_file_src('P25_TRACK', MUSIC.ID) || '" type="audio/mpeg"> </audio>'
) detail_track,
apex_util.get_blob_file_src('P25_TRACK',MUSIC.ID) detail_track_no_style
from "MUSIC"
```
test
```sql
-- select "SONG_ID","NAME_SONG",
-- sys.dbms_lob.getlength("TRACK")"TRACK","MIMETYPE","FILENAME",sys.dbms_lob.getlength("COVER")
-- "COVER","COVER_MIMETYPE","COVER_FILENAME"from "SONGS"
select "SONG_ID",
"NAME_SONG",
"MIMETYPE",
"FILENAME",
apex_util.prepare_url(p_url=>'f?p='||:app_id||':9:'||:app_session|| '::::P9_SONG_ID:'|| SONG_ID) track_link,
decode(nvl(dbms_lob.getlength(TRACK),0),0,null,
'<audio controls > <source src="' || apex_util.get_blob_file_src('P9_TRACK', SONG_ID) || '" type="audio/mpeg"> </audio>'
) detail_track,
apex_util.get_blob_file_src('P9_TRACK', SONG_ID) detail_track_no_style
"COVER_MIMETYPE",
"COVER_FILENAME",
apex_util.prepare_url(
p_url => 'f?p=' || :app_id || ':9:' || :app_session || '::::P9_SONG_ID:' || SONG_ID
) icon_link,
decode(
nvl(dbms_lob.getlength(COVER), 0),
0,
null,
'<img alt=" ' || NAME_SONG || ' " title=" ' || NAME_SONG || ' " style="border: 2px;
-moz-border-radius: 4px; -webkit-border-radius: 4px;" ' || 'src=" ' || apex_util.get_blob_file_src('P9_COVER', SONG_ID) || ' " height="75"
width="75" />'
) detail_img,
apex_util.get_blob_file_src('P3_IMAGE', SONG_ID) detail_img_no_style
from "SONGS"
```
-->
## Скрываю колонки
Оставляю Detail Img
## ICON VIEW
| APEX | Столбцы |
|------------------|--------------------------|
| Link Column | ICON_LINK |
| Source Column | DETAIL_IMG_NO_STYLE |
| Label Column | NAME_ALBUM |
| Image Attributes | width="200" height="200" |
## DETAIL VIEW
TODO
## Настройка страницы отчёта
TODO
# Cтраницы формы
## Настройка страницы формы
<!-- **DIALOG:**
Maximum Width 1000 -->
**CSS:**
Inline CSS
```css
img {
width: 100%;
max-width: 100%;
height: auto;
}
```
## Настройка колонки P$_IMAGE
**STORAGE:**
| APEX | Название колонок |
|------------------|------------------|
| MIME Type Column | MIMETYPE |
| Filename Column | FILENAME |
## Добавление фото второй колонкой (Область изображения)
Components -> Create region
Переносим созданный регион выше формы (или делаем **Layout**.Sequence = 5)
**Appearance:**
CSS Classes = imageItem
**Server-side Condition:**
Type = Function Body
```sql
declare
begin
if :P3_ID_ALBUM is not null then
for c1 in (select nvl(dbms_lob.getlength(IMAGE),0) A from ALBUM where ID_ALBUM = :P3_ID_ALBUM)
loop
if c1.A > 0 then
return true;
end if;
end loop;
end if;
return false;
end;
```
### Для отображения в две колонки в элементе формы:
**Layout:**
Start New Row = False
### Создаём Page Item, для отображения фото, как потомок этого региона (области изображения)
Делаем отображение изображения, затем
**Source:**
| Apex | Делаем |
|-------------|----------------|
| Form Region | Выбираем форму |
| Column | IMAGE |
| Data Type | BLOB |
**Server-side Condition**
Type = Rows returned
```sql
SELECT mimetype from ALBUM
WHERE ID_ALBUM = :P3_ID_ALBUM AND mimetype like 'image%'
```
### Создаём кнопу, для удаления фото, как потомок этого региона (области изображения)
**Identification:**
Button Name = DELETE_IMG
Label = Удалить фото
**Layout**
Region = Обложка альбома
Position = Copy
**Appearance:**
Button Template = Icon
Hot = True
Icon = fa-trash
**Behavior:**
Action = Redirect to URL
Target = javascript:apex.confirm('Вы уверены, что хотите удалить это изображение? Если вы продолжите, оно больше не будет доступно для просмотра другими пользователями.','DELETE_IMG');
### Создаём процесс для кнопки
Processing -> Create Process
**Identification:**
Name = Delete Image
**Source:**
```sql
update ALBUM
set IMAGE = null,
MIMETYPE = null,
FILENAME = null
where ID_ALBUM = :P3_ID_ALBUM;
```
**Execution:**
Sequence = 15
**Success Message:**
Изображение удалено
**Server-side Condition:**
When Button Pressed = DELETE_IMG
# Кнопка - ссылка
class="t-Button t-Button-hot t-Button-stretch t-Button-simple t- t-Button-small"
# Телефон
8 977 179 17 43
999G999G999G999G999G999G9G999G999G99G90