在Kirby中查询图像库的CSV元数据



所以我下载并非常喜欢开始使用Kirby http://www.getkirby.com对于那些不熟悉的人来说,它是一个基于文件的cms。

作为标准,你可以把一堆图像放到目录中,例如site/number1,它会在一个名为site.com/number1的页面上为你创建一个图库。如果你的图片名为example.jpg,你可以创建一个名为example.txt的文件,并在里面放入与图片相关的信息,如标题、日期等。

我对每个单独的图像都有一个文本文件,并将图像分散在服务器的页面文件夹中的想法并不完全满意。

首先,我在资产中放置了大量图像,并在页面中添加了一个变量,所以我只需要将图像ref(例如k-45)添加到page.txt中的列表中,例如

----
Imagelist: a-04, a-08, h-16, i-35
然后我添加了以下代码片段:
 <ul class="gallery">
  <?php $imagelist= $page->imagelist();
  if ($imagelist != ''){
$imagelistitem= explode(", ", $imagelist);
foreach ($imagelistitem  as $image): ?>
  <li><img src="<?php echo url('assets/artistswork/450/').$image.'.jpg' ?>" /></li>
      <?php endforeach ;} ?>
    </ul>

这将生成一个来自中央银行的图片库,效果非常好。当然,比我更有经验的人可以添加一些有用的验证/错误纠正,但只要列表没有错误,它就可以正常工作。

到目前为止,这基本上是Kirby的问题,我的问题从这里开始。

接下来,我想从中央csv表中绘制图像的元数据。如标题、日期、材料等。与$image变量相关的字段。

在我的csv中,第一列股票图书代码将有一个相当于$image变量的数字,我想使用该行中的其余信息来填充一系列跨度,我可以使用jquery格式化和动画,并解析为花式框等。

  1. 我需要一段更好的代码从我的csv生成一个有效的数组。可能通过库存图书编号对结果进行索引
  2. 和一个方法来查询它,并解析出相关数组作为一个变量列表,以在注入中使用。

我想象我可以将代码注入到上面引用的重复器中。

<span class="workTitle">$title</span>
<span class="workDate">$date</span>
<span class="workMaterial">$material</span>
<span class="workDimensions">$dimensions</span>
<span class="workPrice">$price</span>

csv文件的前几行是:

Stock book code,Date,Work Title,height,width,materials,Ownership
a-04,1962,River Barge,0,0,Oil on Board,Sold
a-08,1962,Thames Bridge Fantasy ,48,36,Oil on Board,Available
h-15,1963,Split Rocks,36,32,Oil on Board,Available
i-35,1964,Moon Dyptych,32,21,Oil on Board,Available

我真的不知道如何完成这个。我知道这可能不是特别难,但我不是专家,当然不是处理数组的专家。工作表是在服务器上,并使用一些php,我已经设法打印csv-array结果,但没有标题的数组标题,他们只是被视为一行,在较大的数组中的第一个数组。

所以我真的在寻找从头开始我的问题的第二部分-不期望一个完整的剪切和粘贴解决方案通过任何手段,但如果有人能指出我在正确的方向,这将是伟大的。我没有用过j-query,也不太懂php。然而,我不介意做大量的阅读和花时间让它自己工作,但我可以做一个点在正确的方向。

我找到的不完整的csv-array函数如下所示。可能要从头开始用它:

<?PHP
function readCSV($csvFile){
    $file_handle = fopen($csvFile, 'r');
    while (!feof($file_handle) ) {
        $line_of_text[] = fgetcsv($file_handle, 1024);
    }
    fclose($file_handle);
    return $line_of_text;
}

// Set path to CSV file
$csvFile = 'http://localhost/peterliddle/assets/artistswork/imagemeta.csv';
$csv = readCSV($csvFile);
echo '<pre>';
print_r($csv);
echo '</pre>';
?>

输出这个(和另外300个):

Array
(
    [0] => Array
        (
            [0] => Stock book code
            [1] => Date
            [2] => Work Title
            [3] => height
            [4] => width
            [5] => materials
            [6] => Ownership
        )
    [1] => Array
        (
            [0] => a-04
            [1] => 1962
            [2] => River Barge
            [3] => 0
            [4] => 0
            [5] => Oil on Board
            [6] => Sold
        )
    [2] => Array
        (
            [0] => a-08
            [1] => 1962
            [2] => Thames Bridge Fantasy 
            [3] => 48
            [4] => 36
            [5] => Oil on Board
            [6] => Available
        )
    [3] => Array
        (
            [0] => h-15
            [1] => 1963
            [2] => Split Rocks
            [3] => 36
            [4] => 32
            [5] => Oil on Board
            [6] => Available
        )

首先我要说的是,如果你不需要在文件创建后编辑它们,并且你刚刚开始,那么使用csv文件是一个有效的方法。数据库引入了自己的一组问题,比如安全性,而使用csv文件更容易避免这些问题。只要确保所有的文件都是只读的,你就会没事的。

其次,我想使用内置的php函数fgetcsv来解析您的csv文件。我不确定,但我大胆猜测,它可能更快。

据我所知,有两种方法可以做到这一点。第一种方法是简单地将所需的数据提取到包含所需值的关联数组中,使用标题行作为键值。从csv文件中获取值数组后,我们将其命名为$imageMeta,你可以这样做;

foreach ($imageMeta as $row => $meta)
{
    if ($row === 0 && is_array($meta)) //Reading the first line with your header rows
    {
        $tempMeta = $meta; //A temporary holder for the field headers.
    }else{
        foreach ($meta as $key => $field) //Now we go through each meta row and extract the field data
        {
            $finalMeta[$row-1][$tempMeta[$key]] = $field;
        }
    }
}

这是一种蛮力方法,我会试着想出一些更优雅的方法让你看

看起来Joe提供了一个很好的解决方案,也得到了一些代码https://gist.github.com/jaywilliams/385876通过localhost/…使用相对路径而不是绝对路径来工作

如果我有特殊的问题,我会再次发布并关闭这个通用的

相关内容

  • 没有找到相关文章

最新更新