2017-10-19 8 views
1

Je ne connais pas encore les rapports SilverStripe, mais je n'ai trouvé aucun élément lié à ce problème particulier jusqu'à présent. J'ai un rapport personnalisé qui répertorie toutes les images et les fichiers sur le site dans un gridview, cependant, je voudrais faire en sorte que les gens puissent soit cliquer sur le nom du fichier et aller à l'image ou au fichier pour l'éditer, ou avoir un bouton d'édition pour chaque image et fichier. À l'heure actuelle, si quelqu'un souhaite modifier un fichier ou une image, il doit quitter le rapport, cliquer sur l'onglet Fichiers, rechercher le fichier/l'image et cliquer sur pour modifier. C'est plutôt ennuyeux.SilverStripe 3.4 Rapports personnalisés - Définir les noms de fichiers en tant que liens dans le rapport personnalisé pour faciliter l'édition

Je sais qu'il existe un moyen de rendre les titres de pages cliquables dans les rapports basés sur les exemples de rapports existants dans cms/code/rapports. Mais je ne vois rien qui se rapporte à des liens vers des images et des fichiers téléchargés.

Y a-t-il un moyen de le faire?

Voici le code de mon rapport personnalisé:

<?php 

class CustomSideReport_ListofImagesAndFiles extends SS_Report { 

    // the name of the report 
    public function title() { 
     return 'All Images and Files'; 
    } 

    // what we want the report to return 
    public function sourceRecords($params = null) 
    { 
     return File::get() 
      ->sort('Title'); 
    } 

    // which fields on that object we want to show 
    public function columns() { 
     return array(
      "Title" => 'Image Title', 
      'Filename' => array(
       "Filename" => "Filename", 
       "link" => true, 
      ), 
     ); 
    } 

} 

utilisant "link" => true ne fonctionne pas - il essaie de créer un lien de la page, ce qui ne va pas. J'ai essayé "éditer" et "CanEdit".

Répondre

1

Ok, je suis venu avec cette référence de la configuration pour les liens rompus rapport:

// which fields on that object we want to show 
public function columns() 
{ 
    $linkBase = singleton('CMSFileAddController')->Link('EditForm/field/File/item'); 
    $linkBaseEditLink = str_replace("/add","",$linkBase); 
    $fields = array(
     'Title' => 'Title', 
     'AbsoluteLink' => array(
      'title' => _t('CustomSideReport_ListofImagesAndFiles.ColumnFilename', 'Filename'), 
      'formatting' => function($value, $item) use ($linkBaseEditLink) { 
       return sprintf('<a href="%s">%s</a>', 
        Controller::join_links($linkBaseEditLink, $item->ID."/edit"), 
        strstr($value, '/assets/', false) 
       ); 
      } 
     ) 
    ); 

    return $fields; 
} 

Je ne sais pas si cela est la meilleure solution jamais - cela fonctionne, et je ne peux pas trouver tout ce qui concerne ce type de création de rapports pour SilverStripe (tout ce que j'ai trouvé traite avec obtenir Pages pour les rapports, pas d'images ou de fichiers.)

J'ai dû faire quelques réglages parce qu'il n'y a pas CMSFileEditController comme il y a un CMSPageEditController, mais je l'ai fait avec ce que j'avais eu

Si quelqu'un a une meilleure solution alors par tous les moyens, s'il vous plaît partager!