#html #plsql #oracle-apex
#HTML #plsql #oracle-apex
Вопрос:
У меня есть пример кода процедуры, который отправляет электронное письмо через apex_email.
Он отправляет электронную почту в дни рождения и показывает изображения людей с днями рождения.
Мне нужно изменить код таким образом, чтобы изображения, которые в данный момент отображаются с именем emp, отображались по строкам. Я поделился частью кода, которую необходимо изменить.
В настоящее время с помощью этого кода изображения появляются одно под другим.
т.е. Если есть 5 сотрудников с днями рождения, в первой строке будет отображаться максимум 3 изображения, а затем переход к следующему tr / row. Если есть 3 сотрудника, они останутся в первом ряду.
КОД ДЛЯ ИЗМЕНЕНИЯ:
<h2 style="color: #008000;font-family:Verdana">Greetings </h2>
<td background="IMG" width="800" height="800" valign="top">
<!--[if gte mso 9]>
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:1069px;height:1000;">
<v:fill type="tile" size=100%,100% src="IMG" />
<v:textbox inset="0,0,0,0">
<![endif]-->
<div >
<h2 style="color: red"> <b> <i>'||to_char(i.sysdate,'DDth MONTH')||' </i> </b></h2>
<td>';
for j in(select e.emp_name,e.empid from emp e where substr(to_date(e.EMP_BDAY_DATE,'DD/MM/YYYY'),1,6) = substr(to_date(SYSDATE,'DD/MM/YYYY'),1,6) )
LOOP
l_body_html2 := l_body_html2||' <div class="content"> <img width="120" height="120" style="vertical-align:middle" src="https://myserver.net/birthday/image/?FILE_ID='||j.empid||'" /> </div> <p style="color: red"> <b>'||'Dear '||j.emp_name||'</b></p>';
end loop;
l_body_html := l_body_html||l_body_html2||
</td>
</div>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
Для цикла необходимо изменить отображение изображений, максимум 3 в ряд.
РЕДАКТИРОВАТЬ: я пробовал эту логику, но изображения по-прежнему появляются одно под другим:
<div >
<h2 style="color: red"> <b> <i>'||to_char(i.sysdate,'DDth MONTH')||' </i> </b></h2>
<td>'; begin v_count:=1;
for j in(select e.emp_name,e.empid from emp e where substr(to_date(e.EMP_BDAY_DATE,'DD/MM/YYYY'),1,6) = substr(to_date(SYSDATE,'DD/MM/YYYY'),1,6) )
LOOP
l_body_html2 := l_body_html2||' <div class="content"> <img width="120" height="120" style="vertical-align:middle" src="https://myserver.net/birthday/image/?FILE_ID='||j.empid||'" /> </div> <p style="color: red"> <b>'||'Dear '||j.emp_name||'</b></p>';
if MOD(v_count,3)=0 then
l_body_html2 := l_body_html2|| '<br/>"';
end if;
v_count := v_count 1;
end loop;
end;
l_body_html := l_body_html||l_body_html2||
</td>
</div>
Ответ №1:
Вы можете использовать функцию MOD, чтобы узнать, когда печатать разрыв строки:
Пример:
declare
v_count number;
begin
v_count := 1;
for e in employees loop
v_body := v_body || '<img src="https://... />"';
if MOD(v_count, 3) = 0 then // every 3 items, it will print the line break
v_body := v_body || '<br />"';
end if;
v_count = v_count 1;
end loop;
end;
Комментарии:
1. хорошо, я пытался, но изображения по-прежнему появляются одно под другим.
2. Я отредактировал сообщение и в конце попробовал ваш код, но изображения по-прежнему появляются одно под другим. Что я здесь делаю не так?
3. Может ли это быть ограничением в Outlook или в код необходимо внести изменения?
4. Прежде всего, вы должны знать, как должен выглядеть ваш html, чтобы вы могли видеть, чего не хватает в вашем коде. Ваш разрыв строки не обязательно должен быть br, это может быть div или даже весь ваш цикл может быть таблицей. Для Outlook или gmail лучше всего использовать таблицы для организации того, как будет выглядеть html.