Jump to content
  • Новые сообщения

    • В 13.03.2024 в 08:32, 6cnitymi сказал:

      Добрый день!
      Есть у кого-нибудь возможность залить повторно?
      Или выложить содержимое файла Files.php?
      Спасибо!

       

      <?php
      
      require_once('Simpla.php');
      
      class Files extends Simpla
      {
        private  $allowed_extentions = array('pdf', 'txt', 'doc', 'docx', 'xls', 'xlsx', 'mp4', 'mp3', 'psd', 'ai', 'zip', 'rar');
      
        public function __construct()
        {    
          parent::__construct();
        }
      
        function get_files($filter = array())
        {  
          $object_id_filter = '';
          $type_filter = '';
      
          if(!empty($filter['object_id']))
            $object_id_filter = $this->db->placehold('AND f.object_id in(?@)', (array)$filter['object_id']);
      
          if(!empty($filter['type']))
            $type_filter = $this->db->placehold('AND f.type=?', $filter['type']);
      
          // files
          $query = $this->db->placehold("SELECT f.id, f.name, f.object_id, f.filename, f.type, f.position
                        FROM __files AS f WHERE 1 $object_id_filter $type_filter ORDER BY f.object_id, f.position");
          $this->db->query($query);
          return $this->db->results();
        }
        
        public function add_file($object_id, $type, $filename, $name = '')
        {
          $query = $this->db->placehold("SELECT id FROM __files WHERE object_id=? AND type=? AND filename=?", $object_id, $type, $filename);
          $this->db->query($query);
          $id = $this->db->result('id');
          if(empty($id))
          {
            $query = $this->db->placehold("INSERT INTO __files SET object_id=?, type=?, filename=?", $object_id, $type, $filename);
            $this->db->query($query);
            $id = $this->db->insert_id();
            $query = $this->db->placehold("UPDATE __files SET position=id WHERE id=?", $id);
            $this->db->query($query);
          }
          return($id);
        }
        
        public function update_file($id, $file)
        {
        
          $query = $this->db->placehold("UPDATE __files SET ?% WHERE id=?", $file, $id);
          $this->db->query($query);
          
          return($id);
        }
        
        public function delete_file($id)
        {
          $query = $this->db->placehold("SELECT filename FROM __files WHERE id=?", $id);
          $this->db->query($query);
          $filename = $this->db->result('filename');
          $query = $this->db->placehold("DELETE FROM __files WHERE id=? LIMIT 1", $id);
          $this->db->query($query);
          $query = $this->db->placehold("SELECT count(*) as count FROM __files WHERE filename=? LIMIT 1", $filename);
          $this->db->query($query);
          $count = $this->db->result('count');
          if($count == 0)
          {      
            $file = pathinfo($filename, PATHINFO_FILENAME);
            $ext = pathinfo($filename, PATHINFO_EXTENSION);
      
            @unlink($this->config->root_dir.$this->config->cms_files_dir.$filename);    
          }
        }
      
        public function upload_file($filename, $name)
        {
          // Имя оригинального файла
          $name = $this->correct_filename($name);
          $uploaded_file = $new_name = pathinfo($name, PATHINFO_BASENAME);
          $base = pathinfo($uploaded_file, PATHINFO_FILENAME);
          $ext = pathinfo($uploaded_file, PATHINFO_EXTENSION);
          
          if(in_array(strtolower($ext), $this->allowed_extentions))
          {      
            while(file_exists($this->config->root_dir.$this->config->cms_files_dir.$new_name))
            {  
              $new_base = pathinfo($new_name, PATHINFO_FILENAME);
              if(preg_match('/_([0-9]+)$/', $new_base, $parts))
                $new_name = $base.'_'.($parts[1]+1).'.'.$ext;
              else
                $new_name = $base.'_1.'.$ext;
            }
            if(move_uploaded_file($filename, $this->config->root_dir.$this->config->cms_files_dir.$new_name))      
              return $new_name;
          }
      
          return false;
        }  
      
        public function correct_filename($filename)
        {
          $ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я");
          $en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya");
      
           $res = str_replace($ru, $en, $filename);
          $res = preg_replace("/[\s]+/ui", '-', $res);
          $res = preg_replace("/[^a-zA-Z0-9\.\-\_]+/ui", '', $res);
           $res = strtolower($res);
            return $res;  
        }
      }

       

    • Ну в общем получилось:

      Подключаем composer require tecnickcom/tcpdf

      Если нет composer, то устанавливаем его.

      В корне проекта создаём generate_pdf.php

      <?php
      
      require_once '/vendor/tecnickcom/tcpdf/tcpdf.php';
      
      
      
      
      $pdf = new TCPDF();
      
      // Вертикальный отступ после шапки
      $pdf->Ln(5);
      $pdf->SetCreator(PDF_CREATOR);
      $pdf->SetAuthor('Название сайта');
      $pdf->SetTitle('Информация о продукте');
      $pdf->SetSubject('Экспорт информации о товаре в PDF');
      $pdf->SetFont('dejavusans', '', 10, '', true);
      
      
      
      $pdf->AddPage();
      
      $pdf->SetY(15);
      
      // Логотип
      $logoFile = 'https://прямой_путь_до/logo.png';
      $logoWidth = 70;
      $pdf->Image($logoFile, $pdf->GetX(), $pdf->GetY(), $logoWidth, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
      
      $productData = [
          'url' => $_POST['url'] ?? 'Недоступно',
      ];
      
      // Информация о компании
      $companyInfo = '<h3>Название проекта</h3>
                      <p>Сайт: <a href="ссылка">название</a></p>
                      <p>Ссылка на товар: <a href="https://прямой_путь_до/products/' . $productData['url'] . '">смотреть</a></p>';
      $pdf->writeHTMLCell(0, 0, $pdf->GetX() + $logoWidth - 10, $pdf->GetY(), $companyInfo, 0, 1, 0, true, 'L', true);
      
      // Добавление горизонтальной линии
      $pdf->SetDrawColor(0, 0, 0);
      $pdf->SetLineWidth(0.5);
      $yPosition = $pdf->GetY() + 10;
      $pdf->Line($pdf->GetX(), $yPosition, $pdf->GetPageWidth() - $pdf->GetX(), $yPosition);
      
      // Установка новой Y-позиции после линии для начала контента
      $pdf->SetY($yPosition + 5);
      
      // Извлечение данных из POST
      $productData = [
          'name' => $_POST['name'] ?? 'Недоступно',
          'description' => $_POST['description'] ?? 'Недоступно',
      ];
      
      
      // Формирование HTML-контента для PDF
      $htmlContent = "";
      
      // Имя продукта
      if (!empty($_POST['name'])) {
          // Очистка строки от нежелательных символов и сокращение до 50 символов
          $safeName = mb_substr(trim($_POST['name']), 0, 50);
          $safeName = preg_replace('/[^A-Za-z0-9А-Яа-яёЁ\s\-]/u', '', $safeName);
          $safeName = str_replace(' ', '_', $safeName);
      } else {
          $safeName = 'Недоступно';
      }
      
      // Описание
      if (!empty($productData['description'])) {
          $htmlContent .= "<p><strong>Описание:</strong> {$productData['description']}</p>";
      }
      
      // Вывод HTML-контента в PDF
      $pdf->writeHTML($htmlContent, true, false, true, false, '');
      
      // Вывод каждого изображения после текста
      $pageWidth = $pdf->GetPageWidth() - $pdf->getMargins()['left'] - $pdf->getMargins()['right']; // ширина страницы минус поля
      $imageWidth = $pageWidth * 1;
      $marginTop = 4;
      $marginBottom = 4;
      
      foreach ($_POST['images'] as $imageFilename) {
          $imageUrl = 'https://прямой_путь_до/files/originals/' . $imageFilename;
          if (@getimagesize($imageUrl)) {
              // Добавление отступа сверху
              $pdf->Ln($marginTop);
              
              // Получение размеров изображения
              $sizes = getimagesize($imageUrl);
              // Вычисление высоты изображения, сохраняя пропорции
              $imageHeight = $imageWidth * $sizes[1] / $sizes[0];
      
              // Добавление изображения и выравнивание его по центру
              $pdf->Image($imageUrl, ($pageWidth - $imageWidth) / 2, '', $imageWidth, $imageHeight, 'JPG', '', 'T', false, 300, 'C', false, false, 1, false, false, false);
              
              // Добавление отступа снизу
              $pdf->Ln($imageHeight + $marginBottom);
          }
      }
      
      // После добавления всего контента, футер на последней странице
      $pdf->lastPage();
      
      // Установка Y-позиции для футера
      $footerY = $pdf->GetPageHeight() - 24;
      $pdf->SetY($footerY);
      
      // Установка шрифта для футера
      $pdf->SetFont('dejavusans', '', 9);
      
      // Текст футера и ссылки
      $footerContent = 'Посетите наш сайт: <a href="ссылка">ссылка</a>';
      
      // Добавление футера на страницу
      $pdf->writeHTMLCell(0, 0, '', '', $footerContent, 0, 1, 0, true, 'C', true);
      
      $fileName = "SITE_экспорт_информации_о_товаре_{$safeName}.pdf";
      
      // Вывод документа
      $pdf->Output($fileName, 'I');

      Необходимо прописать относительный путь до файлов (https://прямой_путь_до) и вставить ссылки на свой проект

      И в product.tpl воткнуть форму сбора информации

      <form action="generate_pdf.php" method="post" target="_blank">
      	<input type="hidden" name="url" value="{$product->url|escape}">
          <input type="hidden" name="name" value="{$product->name|escape}">
          <input type="hidden" name="description" value="{$product->body|escape}">
      
          <!-- Для фотографий: предполагаем, что у вас есть массив $product->images с URL-адресами -->
          {foreach from=$product->images item=image}
          <input type="hidden" name="images[]" value="{$image->filename|escape}">
          {/foreach}
      
          <button type="submit">Скачать PDF</button>
      </form>

       

      Edited by Chudo
    • Названия файлов уже получает)

      В .tpl

      
      {foreach from=$product->images item=image}
      <input type="hidden" name="images[]" value="{$image->filename|escape}">
      {/foreach}

      и в php 
       

      // Добавление названий изображений
      if (!empty($_POST['images'])) {
          $htmlContent .= "<h2>Изображения товара:</h2><ul>";
          foreach ($_POST['images'] as $image) {
              $filename = basename($image); // Извлекаем имя файла из полного пути
              $htmlContent .= "<li>{$filename}</li>"; // Добавляем только имя файла в список
          }
          $htmlContent .= "</ul>";
      }

       

      Edited by Chudo
    • Как бы получить изображение в pdf, хотя бы первое, подскажете плиз)

    • generate_pdf
      <?php
      
      require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; // Путь к файлу TCPDF
      
      $productData = [
          'id' => $_POST['id'],
          'url' => $_POST['url'],
          'name' => $_POST['name'],
          // Заполните остальные данные
      ];
      
      $pdf = new TCPDF();
      $pdf->AddPage();
      $pdf->SetFont('dejavusans', '', 12);
      
      $htmlContent = "<h1>{$productData['name']}</h1>
      <p><strong>ID:</strong> {$productData['id']}</p>
                      <p><strong>URL:</strong> {$productData['url']}</p>
      
      $pdf->writeHTML($htmlContent, true, false, true, false, '');
      $pdf->Output('product_info.pdf', 'I');

      и кнопка в tpl
       

      <form action="generate_pdf.php" method="post" target="_blank">
      			<input type="hidden" name="id" value="{$product->id|escape}">
      			<input type="hidden" name="url" value="{$product->url|escape}">
      		    <input type="hidden" name="name" value="{$product->name|escape}">
      		    <button type="submit">Скачать PDF</button>
      		</form>

      Начал выводить ID, url и name поля

      Edited by Chudo
  • Новые темы

  • Who's Online   0 Members, 0 Anonymous, 154 Guests (See full list)

    There are no registered users currently online

  • Member Statistics

    15117
    Total Members
    1517
    Most Online
    Сергейиванов
    Newest Member
    Сергейиванов
    Joined
  • Новые сообщения

    • <?php require_once('Simpla.php'); class Files extends Simpla { private $allowed_extentions = array('pdf', 'txt', 'doc', 'docx', 'xls', 'xlsx', 'mp4', 'mp3', 'psd', 'ai', 'zip', 'rar'); public function __construct() { parent::__construct(); } function get_files($filter = array()) { $object_id_filter = ''; $type_filter = ''; if(!empty($filter['object_id'])) $object_id_filter = $this->db->placehold('AND f.object_id in(?@)', (array)$filter['object_id']); if(!empty($filter['type'])) $type_filter = $this->db->placehold('AND f.type=?', $filter['type']); // files $query = $this->db->placehold("SELECT f.id, f.name, f.object_id, f.filename, f.type, f.position FROM __files AS f WHERE 1 $object_id_filter $type_filter ORDER BY f.object_id, f.position"); $this->db->query($query); return $this->db->results(); } public function add_file($object_id, $type, $filename, $name = '') { $query = $this->db->placehold("SELECT id FROM __files WHERE object_id=? AND type=? AND filename=?", $object_id, $type, $filename); $this->db->query($query); $id = $this->db->result('id'); if(empty($id)) { $query = $this->db->placehold("INSERT INTO __files SET object_id=?, type=?, filename=?", $object_id, $type, $filename); $this->db->query($query); $id = $this->db->insert_id(); $query = $this->db->placehold("UPDATE __files SET position=id WHERE id=?", $id); $this->db->query($query); } return($id); } public function update_file($id, $file) { $query = $this->db->placehold("UPDATE __files SET ?% WHERE id=?", $file, $id); $this->db->query($query); return($id); } public function delete_file($id) { $query = $this->db->placehold("SELECT filename FROM __files WHERE id=?", $id); $this->db->query($query); $filename = $this->db->result('filename'); $query = $this->db->placehold("DELETE FROM __files WHERE id=? LIMIT 1", $id); $this->db->query($query); $query = $this->db->placehold("SELECT count(*) as count FROM __files WHERE filename=? LIMIT 1", $filename); $this->db->query($query); $count = $this->db->result('count'); if($count == 0) { $file = pathinfo($filename, PATHINFO_FILENAME); $ext = pathinfo($filename, PATHINFO_EXTENSION); @unlink($this->config->root_dir.$this->config->cms_files_dir.$filename); } } public function upload_file($filename, $name) { // Имя оригинального файла $name = $this->correct_filename($name); $uploaded_file = $new_name = pathinfo($name, PATHINFO_BASENAME); $base = pathinfo($uploaded_file, PATHINFO_FILENAME); $ext = pathinfo($uploaded_file, PATHINFO_EXTENSION); if(in_array(strtolower($ext), $this->allowed_extentions)) { while(file_exists($this->config->root_dir.$this->config->cms_files_dir.$new_name)) { $new_base = pathinfo($new_name, PATHINFO_FILENAME); if(preg_match('/_([0-9]+)$/', $new_base, $parts)) $new_name = $base.'_'.($parts[1]+1).'.'.$ext; else $new_name = $base.'_1.'.$ext; } if(move_uploaded_file($filename, $this->config->root_dir.$this->config->cms_files_dir.$new_name)) return $new_name; } return false; } public function correct_filename($filename) { $ru = explode('-', "А-а-Б-б-В-в-Ґ-ґ-Г-г-Д-д-Е-е-Ё-ё-Є-є-Ж-ж-З-з-И-и-І-і-Ї-ї-Й-й-К-к-Л-л-М-м-Н-н-О-о-П-п-Р-р-С-с-Т-т-У-у-Ф-ф-Х-х-Ц-ц-Ч-ч-Ш-ш-Щ-щ-Ъ-ъ-Ы-ы-Ь-ь-Э-э-Ю-ю-Я-я"); $en = explode('-', "A-a-B-b-V-v-G-g-G-g-D-d-E-e-E-e-E-e-ZH-zh-Z-z-I-i-I-i-I-i-J-j-K-k-L-l-M-m-N-n-O-o-P-p-R-r-S-s-T-t-U-u-F-f-H-h-TS-ts-CH-ch-SH-sh-SCH-sch---Y-y---E-e-YU-yu-YA-ya"); $res = str_replace($ru, $en, $filename); $res = preg_replace("/[\s]+/ui", '-', $res); $res = preg_replace("/[^a-zA-Z0-9\.\-\_]+/ui", '', $res); $res = strtolower($res); return $res; } }  
    • Ну в общем получилось: Подключаем composer require tecnickcom/tcpdf Если нет composer, то устанавливаем его. В корне проекта создаём generate_pdf.php <?php require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; $pdf = new TCPDF(); // Вертикальный отступ после шапки $pdf->Ln(5); $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('Название сайта'); $pdf->SetTitle('Информация о продукте'); $pdf->SetSubject('Экспорт информации о товаре в PDF'); $pdf->SetFont('dejavusans', '', 10, '', true); $pdf->AddPage(); $pdf->SetY(15); // Логотип $logoFile = 'https://прямой_путь_до/logo.png'; $logoWidth = 70; $pdf->Image($logoFile, $pdf->GetX(), $pdf->GetY(), $logoWidth, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false); $productData = [ 'url' => $_POST['url'] ?? 'Недоступно', ]; // Информация о компании $companyInfo = '<h3>Название проекта</h3> <p>Сайт: <a href="ссылка">название</a></p> <p>Ссылка на товар: <a href="https://прямой_путь_до/products/' . $productData['url'] . '">смотреть</a></p>'; $pdf->writeHTMLCell(0, 0, $pdf->GetX() + $logoWidth - 10, $pdf->GetY(), $companyInfo, 0, 1, 0, true, 'L', true); // Добавление горизонтальной линии $pdf->SetDrawColor(0, 0, 0); $pdf->SetLineWidth(0.5); $yPosition = $pdf->GetY() + 10; $pdf->Line($pdf->GetX(), $yPosition, $pdf->GetPageWidth() - $pdf->GetX(), $yPosition); // Установка новой Y-позиции после линии для начала контента $pdf->SetY($yPosition + 5); // Извлечение данных из POST $productData = [ 'name' => $_POST['name'] ?? 'Недоступно', 'description' => $_POST['description'] ?? 'Недоступно', ]; // Формирование HTML-контента для PDF $htmlContent = ""; // Имя продукта if (!empty($_POST['name'])) { // Очистка строки от нежелательных символов и сокращение до 50 символов $safeName = mb_substr(trim($_POST['name']), 0, 50); $safeName = preg_replace('/[^A-Za-z0-9А-Яа-яёЁ\s\-]/u', '', $safeName); $safeName = str_replace(' ', '_', $safeName); } else { $safeName = 'Недоступно'; } // Описание if (!empty($productData['description'])) { $htmlContent .= "<p><strong>Описание:</strong> {$productData['description']}</p>"; } // Вывод HTML-контента в PDF $pdf->writeHTML($htmlContent, true, false, true, false, ''); // Вывод каждого изображения после текста $pageWidth = $pdf->GetPageWidth() - $pdf->getMargins()['left'] - $pdf->getMargins()['right']; // ширина страницы минус поля $imageWidth = $pageWidth * 1; $marginTop = 4; $marginBottom = 4; foreach ($_POST['images'] as $imageFilename) { $imageUrl = 'https://прямой_путь_до/files/originals/' . $imageFilename; if (@getimagesize($imageUrl)) { // Добавление отступа сверху $pdf->Ln($marginTop); // Получение размеров изображения $sizes = getimagesize($imageUrl); // Вычисление высоты изображения, сохраняя пропорции $imageHeight = $imageWidth * $sizes[1] / $sizes[0]; // Добавление изображения и выравнивание его по центру $pdf->Image($imageUrl, ($pageWidth - $imageWidth) / 2, '', $imageWidth, $imageHeight, 'JPG', '', 'T', false, 300, 'C', false, false, 1, false, false, false); // Добавление отступа снизу $pdf->Ln($imageHeight + $marginBottom); } } // После добавления всего контента, футер на последней странице $pdf->lastPage(); // Установка Y-позиции для футера $footerY = $pdf->GetPageHeight() - 24; $pdf->SetY($footerY); // Установка шрифта для футера $pdf->SetFont('dejavusans', '', 9); // Текст футера и ссылки $footerContent = 'Посетите наш сайт: <a href="ссылка">ссылка</a>'; // Добавление футера на страницу $pdf->writeHTMLCell(0, 0, '', '', $footerContent, 0, 1, 0, true, 'C', true); $fileName = "SITE_экспорт_информации_о_товаре_{$safeName}.pdf"; // Вывод документа $pdf->Output($fileName, 'I'); Необходимо прописать относительный путь до файлов (https://прямой_путь_до) и вставить ссылки на свой проект И в product.tpl воткнуть форму сбора информации <form action="generate_pdf.php" method="post" target="_blank"> <input type="hidden" name="url" value="{$product->url|escape}"> <input type="hidden" name="name" value="{$product->name|escape}"> <input type="hidden" name="description" value="{$product->body|escape}"> <!-- Для фотографий: предполагаем, что у вас есть массив $product->images с URL-адресами --> {foreach from=$product->images item=image} <input type="hidden" name="images[]" value="{$image->filename|escape}"> {/foreach} <button type="submit">Скачать PDF</button> </form>  
    • Названия файлов уже получает) В .tpl {foreach from=$product->images item=image} <input type="hidden" name="images[]" value="{$image->filename|escape}"> {/foreach} и в php    // Добавление названий изображений if (!empty($_POST['images'])) { $htmlContent .= "<h2>Изображения товара:</h2><ul>"; foreach ($_POST['images'] as $image) { $filename = basename($image); // Извлекаем имя файла из полного пути $htmlContent .= "<li>{$filename}</li>"; // Добавляем только имя файла в список } $htmlContent .= "</ul>"; }  
    • Как бы получить изображение в pdf, хотя бы первое, подскажете плиз)
    • generate_pdf <?php require_once '/vendor/tecnickcom/tcpdf/tcpdf.php'; // Путь к файлу TCPDF $productData = [ 'id' => $_POST['id'], 'url' => $_POST['url'], 'name' => $_POST['name'], // Заполните остальные данные ]; $pdf = new TCPDF(); $pdf->AddPage(); $pdf->SetFont('dejavusans', '', 12); $htmlContent = "<h1>{$productData['name']}</h1> <p><strong>ID:</strong> {$productData['id']}</p> <p><strong>URL:</strong> {$productData['url']}</p> $pdf->writeHTML($htmlContent, true, false, true, false, ''); $pdf->Output('product_info.pdf', 'I'); и кнопка в tpl   <form action="generate_pdf.php" method="post" target="_blank"> <input type="hidden" name="id" value="{$product->id|escape}"> <input type="hidden" name="url" value="{$product->url|escape}"> <input type="hidden" name="name" value="{$product->name|escape}"> <button type="submit">Скачать PDF</button> </form> Начал выводить ID, url и name поля
  • Forum Statistics

    • Total Topics
      12312
    • Total Posts
      95852
×
×
  • Create New...