2015-05-13 14 views
5

Concrete5 kullanıyorum ve çeşitli yüklenen dosyalar için küçük resimler göstermeye çalışıyorum. Bunlardan bazıları görüntü olabilirken, çoğunluğu PDF'lerdir.Concrete5: set Küçük resmi oluştur resme (ör. PDF'ler için)

Şu anda kullanıyorum:

<?php 
$file = File::getByID($fID); 
$imageHelper = Core::make('helper/image'); 
try { 
    $imageHelper->outputThumbnail($file, 200, 200); 
} catch(InvalidArgumentException $e) { ?> 
    <img src='https://placehold.it/200x200'> 
<?php } ?> 

ben çok arka planda Ghostscript'i kullanarak örneğin, bir şekilde PDF dosyaları daha küçük bir küçük resim oluşturmayı tercih ederim. Yerleşik dosya yöneticisinde en az bir PDF simgesi görüntülenir. Bu, optimal olmayan bir seçenek olurdu, ancak yine de PDF ile uğraştığımızı belirtmek için hiçbir şey göstermemek daha iyi ..

Dahili küçük resimlere nasıl erişebilirim? Ve daha önemlisi, yüklendiklerinde belirli dosya türleri için bunları nasıl düzgün şekilde üzerine yazabilirim?

DÜZENLEME:

Ben $file->getThumbnailURL('type'); geldi ve kendi amaçları için bir tür yarattı. Bir dosya yüklendiğinde böyle bir küçük resmi nasıl otomatik olarak oluşturursunuz? Dosyayı düz PHP ile nasıl oluşturacağımı anlayabiliyorum ama bunu Concrete5'te saklamak emin değilim.

+0

C5'in bunu destekleyip desteklemediğine dair bir fikrim yok, ilginç bir soru. Eğer işe yaramazsa, küçük resim nesline kendiniz bakmayı, bunları ayrı bir dizinde oluşturmayı ve saklamayı düşünebilirsiniz. –

+0

@Pekka Bunu biraz düşünmüştüm .. Dikkat ettiğim bir “on_file_add” olayı olduğunu fark ettim. Küçük resimleri dosyalarla ilişkilendirmeyi nasıl öneriyorsunuz? Dosya kimliğine göre bir dizin yapısı oluşturun? Veya özel küçük resim türlerinin yerini bir şekilde ayarlayabilir miyim?Bunu getirdiğin için teşekkürler! – Joost

cevap

2

Sonuçta, bunu nasıl yaptım. aşağıdaki gibi

benim paketin kumandanın yapılandırmak yönteminde yeni bir küçük resim türü oluşturarak başladı:

namespace Concrete\Package\Mypackage\Src\DocumentProcessing; 

use Core; 
use File; 
use Concrete\Core\File\Image\Thumbnail\Type\Type; 

class Pdfthumbnails { 

    public function processPDFThumbnails($fv) { 
     $fi = Core::make('helper/file'); 
     $fvObj = $fv->getFileVersionObject(); 
     $ext = $fi->getExtension($fvObj->getFilename()); 
     $file = $fvObj->getFile(); 
     if ($ext == 'pdf') { 
      $type = Type::getByHandle('pdfthumbnails'); 
      $basetype = $type->getBaseVersion(); 
      $thumbpath = $basetype->getFilePath($fvObj); 

      $fsl = $file->getFileStorageLocationObject()->getFileSystemObject(); 
      $fre = $fvObj->getFileResource(); 
      // this requires sufficient permissions.. 
      // depending on your setup, reconsider 0777 
      mkdir('application/files'.dirname($thumbpath), 0777, true); 
      exec('gs -o application/files'.escapeshellarg($thumbpath).' -dPDFFitPage -sDEVICE=png16m -g200x200 -dLastPage=1 -f application/files/'.escapeshellarg($fre->getPath())); 
     } 
    } 
} 

: Sonra aşağıdaki içeriğe sahip bir sınıf mypackage/src/document_processing/pdfthumbnails.php oluşturulan

use Concrete\Core\File\Image\Thumbnail\Type\Type; 

... 

public function configure($pkg) { 
    ... 

    $thumbnailType = new Type(); 
    $thumbnailType->setName(tc('ThumbnailTypeName', 'PDF Thumbnails')); 
    $thumbnailType->setHandle('pdfthumbnails'); 
    $thumbnailType->setWidth(200); 
    $thumbnailType->setHeight(200); 
    $thumbnailType->save(); 
} 

Ve sonra paketimin denetleyicisinde on_file_version_add olayına bağlandım:

use Concrete\Package\Mypackage\Src\DocumentProcessing\Pdfthumbnails; 

... 

    public function on_start() { 
     Events::addListener('on_file_version_add', array(new Pdfthumbnails(), 'processPDFThumbnails')); 
    } 
1

Bu file inspectors kullanarak, sonuçta C5 içeride mümkün görünmektedir:

bir dosya o isteğe bağlı geçirilebilir (Dosya İthalatçı sınıfının bir örneği aracılığıyla olur) concrete5 aktarılır Her zaman onlar dosya müfettişleri üzerinde

fazla bilgi ve uygulama örnekleri yüklenen veya yeniden taranır yaparken belirli türde dosyalar üzerinde ek işlemleri gerçekleştirebilirsiniz bir PHP sınıfı olan dosya Müfettiş, bulunabilir in the C5 documentation.

this Concrete5 forum discussion'da, tam olarak ne yapmak istediğinizi oluşturmak için bu özelliği kullanmışsınız gibi görünüyor, ImageMagick kullanarak PDF'ler için bir küçük resim oluşturucu.

Bu kullanıcının örnek kodunda iki şey var. İlk olarak, çalışan C5 örneğiyle yeni bir özel dosya denetçisini kaydeder. Ardından, özel denetleyici kitaplığınız projeye eklenir.

+1

Güzel, bu oldukça düzgün görünüyor! Teşekkürler. Ben bunu deneyeceğim ve geri rapor edecek :) – Joost

+0

Bu dosyayı file_add_version olayı içine kancalamak için sona erdi ve bu iyi çalışıyor. Sorun yine de aslında oluşturulan küçük resim ile _storing_. Bu orada ele alınmıyor gibi görünüyor. – Joost

İlgili konular