Перейти к содержимому


Вопросы по работе с дополнительными действиями


Сообщений в теме: 34

#1 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Февраль 2013 - 01:15

1. Как можно в дополнительных действиях ( в всплывающем окне) добавить наборы стилей. Ведь тег style type='text/css' добавляется только в head? Я так понимаю единственный способ только через яваскрипт? (на багтрекере просмотрите баг с айди 67),

2. В дополнительном действии я хочу использовать форму для загрузи файлов в созданную таблицу оплаты, где есть тип изображения. На что нужно обратить внимание? Как добавить такую возможность?

3. Какой алгоритм загрузки файлов в кб, если разница в загрузке изображения и файла?

Ув. модераторы, разработчики... Переименуйте ,пожалуйста, тему в "Вопросы по работе с дополнительными действиями".

Сообщение отредактировал wondertalik: 11 Февраль 2013 - 03:12


#2 Гость_Roman_*

  • Гости

Отправлено 11 Февраль 2013 - 08:20

1. Тег <style> можно включить в любом месте. И хотя это не всегда валидно, но работает во всех браузерах. К тому же, код доп. действия не включает в себя шапку сам, Вы можете набрать содержимое <head> так, как нужно.
2. Обратить внимание необходимо только на перемещение файла в структура каталогов. Алгоритм копирования описан здесь.
3. Единственная разница - для изображения необходимо удалить превью из папки cache, если файл заменяется новым.

#3 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 11 Февраль 2013 - 20:06

Значится код формы для загрузки такой:

<form method='post' enctype='multipart/form-data'>
<input type='file' name='uploadfile' />
	<input name='w_submit' id='submit' value='Сообщить об оплате' type='submit' style='padding: 5px;'>
	<input type='hidden' name='csrf' value='{$csrf}' />
</form>

Вычисления такие:

$insert_data['ФИО Клиента'] = $user['id'];
insert_query($insert_data, "Оплаты");
$line_insert_id = mysql_insert_id();

//Если файл успешно загружен
if(empty($_FILES['uploadfile']['error'])) {

  $file_path = get_file_path(1311, 9, $_FILES['uploadfile']['name']);
  create_data_file_dirs(1311, 9, $_FILES['uploadfile']['name']);
  copy($_FILES['uploadfile']['tmp_name'], $file_path);
 
  $update_data['Сканированный файл'] = $_FILES['uploadfile']['name'];
  update_query($update_data, "Оплаты", "`id`=".intval($line_insert_id));
}

Запись в таблице оплаты появляется, однако:
1. Если тип поля файл (тогда я вижу ссылку с загруженным именем файла), нажимаю на него - появляется сообщение "file does not exists".
2. Если тип поля изображение (тогда - список.jpg (файл не существует)).

И еще нужно ли для файла изображения отдельно создавать превиев? если да, то каким образом?

#4 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Февраль 2013 - 04:52

И еще есть идея, имеется таблица в которой указаны три поля: имя, ссылка, логотип. Идея в том что я хочу чтобы в представлении формировалась ссылка-картинка. Попробовал, код ниже, ссылки формируются. А вот изображения не показываются.

Подготовка данных:

$sqlQuery = "SELECT * FROM ".DATA_TABLE."151 WHERE `f1541` = 'Мы на других ресурсах' AND `status` = 0";
$result = sql_query($sqlQuery) or die(mysql_error()."<br>".$sqlQuery);

$another_link = array();

while($row = mysql_fetch_assoc($result)) {
  $r['name'] = $row['f1511'];
  $r['link'] = $row['f1521'];
  $r['src'] = get_file_path(1531, $row['id'], $row['f1531']);
  array_push($another_link, $r);
}

$smarty->assign("another_link", $another_link);

Структура ссылки:


{foreach $another_link as $item}
<a href="{$item.link}"><img style='border: none;' src="{$item.src}" alt="{$item.name}"></a>
{/foreach}

Я так понимаю проблемная часть здесь:
$r['src'] = get_file_path(1531, $row['id'], $row['f1531']);
Какие решения есть?

Сообщение отредактировал wondertalik: 12 Февраль 2013 - 04:53


#5 Гость_Roman_*

  • Гости

Отправлено 12 Февраль 2013 - 07:57

Просмотр сообщенияwondertalik (11 Февраль 2013 - 20:06) писал:

Запись в таблице оплаты появляется, однако:
1. Если тип поля файл (тогда я вижу ссылку с загруженным именем файла), нажимаю на него - появляется сообщение "file does not exists".
2. Если тип поля изображение (тогда - список.jpg (файл не существует)).

И еще нужно ли для файла изображения отдельно создавать превиев? если да, то каким образом?
Проверьте, а загрузился ли файл вообще в структуру каталогов папки files?
Превью для изображений генерируется в момент первого просмотра, отдельной генерации можно не делать.

Просмотр сообщенияwondertalik (12 Февраль 2013 - 04:52) писал:

Я так понимаю проблемная часть здесь:
$r['src'] = get_file_path(1531, $row['id'], $row['f1531']);
Какие решения есть?
Сделайте ссылку как в таблице. Т.е. имеется ввиду ссылка вида open_file.php....

#6 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Февраль 2013 - 11:41

Просмотр сообщенияRoman (12 Февраль 2013 - 07:57) писал:

Проверьте, а загрузился ли файл вообще в структуру каталогов папки files?
Проверил на локальной версии. Файл загружается. На саас нет возможности проверить. Есть еще идеи?

Просмотр сообщенияRoman (12 Февраль 2013 - 07:57) писал:

.
Сделайте ссылку как в таблице. Т.е. имеется ввиду ссылка вида open_file.php....
Это помогло, может кому-то понадобится:
$r['src'] = "/open_file.php?field=1531&line=".intval($row['id'])."&file=".$row['f1531']."&show=1";

Сообщение отредактировал wondertalik: 12 Февраль 2013 - 12:04


#7 Гость_Roman_*

  • Гости

Отправлено 12 Февраль 2013 - 12:31

Просмотр сообщенияwondertalik (12 Февраль 2013 - 11:41) писал:

Проверил на локальной версии. Файл загружается. На саас нет возможности проверить. Есть еще идеи?
А имя файла в ссылке соответствует имени файла в поле? Может проблема с русскими буквами?

#8 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Февраль 2013 - 12:43

Просмотр сообщенияRoman (12 Февраль 2013 - 12:31) писал:

А имя файла в ссылке соответствует имени файла в поле? Может проблема с русскими буквами?
О какой ссылке идет речь? загрузил файл с именем на латинице. Та же беда.

Сообщение отредактировал wondertalik: 12 Февраль 2013 - 12:43


#9 Гость_Roman_*

  • Гости

Отправлено 12 Февраль 2013 - 12:54

Я имею ввиду ссылку open_file.php. Все параметры в ней корректны?

#10 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Февраль 2013 - 12:56

Просмотр сообщенияRoman (12 Февраль 2013 - 12:54) писал:

Я имею ввиду ссылку open_file.php. Все параметры в ней корректны?
Это я поменял на тип файл. И тогда ссылка.
 https://testw.clientbase.ru/open_file.php?table=131&field=1311&line=10&file=dsc00157_001.jpg 

А это если тип - изображение: http://awesomescreenshot.com/053x2cn0a Залил с помощью дополнительного действия файл:
$file_path = c:/program files/mstl/clientbase/www/files/a3/36/a33695cd4e9eedad8ebbc4df8a15eefd_1311_9_49;

Проверил файл, действительно существует. Теперь иду в кб. захожу в настройки - менеджер файлов - список потерянных и вижу это http://awesomescreenshot.com/0bax36a0d . Захожу в таблицу, тип поля изображение и вижу это http://awesomescreenshot.com/0bax36a0d .

SQL:

 INSERT INTO `f_data131` (`id`, `user_id`, `add_time`, `status`, `f1271`, `f1281`, `f1291`, `f1301`, `f1311`, `f1351`, `r`, `u`) VALUES (11, 1, '2013-02-12 16:30:22', 0, 11, '2013-01-19 00:00:00', 'Необходимо добавить прикрпить файл, и датепикер', 30003.00, '1.jpg', 1, 0, 0); 

Сообщение отредактировал wondertalik: 12 Февраль 2013 - 15:39


#11 Гость_Roman_*

  • Гости

Отправлено 12 Февраль 2013 - 15:30

//Если файл успешно загружен
if(empty($_FILES['uploadfile']['error'])) {
  $file_path = get_file_path(1311, 9, $_FILES['uploadfile']['name']);
  create_data_file_dirs(1311, 9, $_FILES['uploadfile']['name']);
  copy($_FILES['uploadfile']['tmp_name'], $file_path);

  $update_data['Сканированный файл'] = $_FILES['uploadfile']['name'];
  update_query($update_data, "Оплаты", "`id`=".intval($line_insert_id));
}
Меня тут смущает момент в том, что в функциях get_file_path() и create_data_file_dirs() жёстко указана строка с id=9, однако в update_query() обновляется $line_insert_id. Это реально так или задано для примера?

#12 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 12 Февраль 2013 - 17:11

Просмотр сообщенияRoman (12 Февраль 2013 - 15:30) писал:

Меня тут смущает момент в том, что в функциях get_file_path() и create_data_file_dirs() жёстко указана строка с id=9, однако в update_query() обновляется $line_insert_id. Это реально так или задано для примера?
Вы правы, не обратил внимание какой айди строки я передаю. Спасибо за помощь.

Просмотр сообщенияRoman (11 Февраль 2013 - 08:20) писал:

3. Единственная разница - для изображения необходимо удалить превью из папки cache, если файл заменяется новым.
Имя превью формируется get_file_hash() и хранится прям в корне cache? drop_file_by_path() удаляет файл без превью я так понял?

#13 Гость_Roman_*

  • Гости

Отправлено 12 Февраль 2013 - 17:24

Имя превью формируется из id таблицы, id поля, id строки и имени файла, хранится прямо в папке cache без субдиректорий. drop_file_by_path() превью не удаляет.

#14 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 13 Февраль 2013 - 08:35

В представлении, этот же код не работает. Файл не загружается. Как быть, в чем ошибка?

#15 Гость_Roman_*

  • Гости

Отправлено 13 Февраль 2013 - 08:54

Тяжело сказать. Опять же стоит всё проверить. Форму используете текущую из представления или закрываете её и используете свою? Просто в первом случае не прописан атрибут enctype="multipart/form-data", без которого загрузка файлов невозможна.

#16 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 13 Февраль 2013 - 11:13

Просмотр сообщенияRoman (13 Февраль 2013 - 08:54) писал:

Тяжело сказать. Опять же стоит всё проверить. Форму используете текущую из представления или закрываете её и используете свою? Просто в первом случае не прописан атрибут enctype="multipart/form-data", без которого загрузка файлов невозможна.

<form method='post'  enctype='multipart/form-data'>
<table style='margin-top: 20px;'>
  <tbody>
   <tr>
	<td width='154px'>
	<div class='w_left_name'>
	 Дата оплаты <span style='color: red;'>*</span>:
	</div></td>
	<td>
	<div class='w_right_name'>
	 <input id='date' name='w_date' type='text' style='width: 300px;'>
	</div></td>
   </tr>
   <tr>
	<td>
	<div class='w_left_name'>
	 Сумма <span style='color: red;'>*</span>, грн:
	</div></td>
	<td>
	<div class='w_right_name'>
	 <input id='sum' name='w_sum' type='text' style='width: 300px;'>
	</div></td>
   </tr>
	  <tr>
	<td>
	<div class='w_left_name'>
	 Прикрепить файл:
	</div></td>
	<td>
	<div class='w_right_name'>
	 <input type='file' name='file' />
	</div></td>
   </tr>

   <tr>
	<td colspan='2'>
	<p style='margin-top: 20px'>
	 <span style='color: red;'>*</span> - поля, обязательные для заполнения
	</p></td>
   </tr>
   <tr>
	<td colspan='2' align='right'>
	<input name='w_submit_file' id='w_submit_file' value='Сообщить об оплате' type='submit' style='padding: 5px;'>
	<input type='hidden' name='csrf' value='{$csrf}' />
	</td>
   </tr>
  </tbody>
</table>
</form>

Код вычислений:

//Обработка сообщить об оплате
if (isset($_POST['w_submit_file'])) {

if (empty($_POST['w_date'])) {
  header("Location: report.php?id=21&oplata=yes&clear=yes");
  return;
}else if (empty($_POST['w_sum'])) {
  header("Location: report.php?id=21&oplata=yes&clear=yes");
  return;
}
$insert_data['Дата оплаты'] = form_eng_time($_POST['w_date']);
$insert_data['Сумма, грн'] = form_eng_number($_POST['w_sum']);
$insert_data['ФИО Клиента'] = $user['id'];
insert_query($insert_data, "Оплаты");
$line_insert_id = mysql_insert_id();

//Если файл успешно загружен
if(empty($_FILES['file']['error'])) {

$file_path = get_file_path(1311, $line_insert_id, $_FILES['file']['name']);

create_data_file_dirs(1311, $line_insert_id, $_FILES['file']['name']);
copy($_FILES['file']['tmp_name'], $file_path);
$update_data['Сканнированный файл'] = $_FILES['file']['name'];
update_query($update_data, "Оплаты", "`id`=".intval($line_insert_id));
}
if ($line_insert_id) {
  echo "<script>alert('Уведомление отправлено');</script>";
} else {
  header("Location: report.php?id=21&oplata=yes&falseopl=yes");
}
}

Еррор. Судя по всему копирование не происходит.
Warning: copy(): Unable to access in /home/testw/public_html/report.php(12) : eval()'d code on line 28

Сообщение отредактировал wondertalik: 13 Февраль 2013 - 11:13


#17 Гость_Roman_*

  • Гости

Отправлено 13 Февраль 2013 - 12:06

Закройте форму самого отчёта. Т.е. в отображении напишите
</form>
<form .... - и далее Ваш код


#18 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 13 Февраль 2013 - 14:34

Просмотр сообщенияRoman (13 Февраль 2013 - 12:06) писал:

Закройте форму самого отчёта. Т.е. в отображении напишите
</form>
<form .... - и далее Ваш код
Что-то я не совсем понял, так он ведь тег закрыт же, в коде отображения, которые я предоставил!

#19 Гость_Roman_*

  • Гости

Отправлено 13 Февраль 2013 - 14:44

Я имею ввиду форму, которая не присутстсвует в отображении представления. Однако, открыв исходный код html любого представления, вы увидите, что форма там уже есть, независимо от того, добавляли Вы её или нет. Т. е. отображение представления находится в форме. Первой строкой отображения Вы закрываете эту форму, а потом закрывать Вашу форму уже не требуется, так как после отображения будет тег </form>.

#20 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 13 Февраль 2013 - 16:00

Просмотр сообщенияRoman (13 Февраль 2013 - 14:44) писал:

Я имею ввиду форму, которая не присутстсвует в отображении представления. Однако, открыв исходный код html любого представления, вы увидите, что форма там уже есть, независимо от того, добавляли Вы её или нет. Т. е. отображение представления находится в форме. Первой строкой отображения Вы закрываете эту форму, а потом закрывать Вашу форму уже не требуется, так как после отображения будет тег </form>.
Просмотрел код. Действительно. Теперь увидел. Увидел поле:

<input type=hidden name=csrf value='VH0dwKTruCEytXHWXd95ug=='>

Значит в представления уже не нужно добавлять?
<input type='hidden' name='csrf' value='{$csrf}' />






Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных