首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Kirby图片库查询CSV元数据

为Kirby图片库查询CSV元数据
EN

Stack Overflow用户
提问于 2013-05-03 18:14:51
回答 2查看 480关注 0票数 1

因此,我下载了Kirby http://www.getkirby.com,并且非常喜欢使用它,因为那些不熟悉它是基于文件的cms。

作为标准,您可以将一组图像放在一个目录中,例如site/ of 1,它将在一个名为site.com/of 1的页面上为您创建一个图库。如果您的其中一个图像名为example.jpg,您可以创建一个名为example.txt的文件,并将与图像相关的内部信息(如标题、日期等)放入其中。

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

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

代码语言:javascript
复制
----

Imagelist: a-04, a-08, h-16, i-35

然后,我添加了以下代码片段:

代码语言:javascript
复制
 <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. 以及一种查询它并将相关数组解析为要在注入中使用的变量列表的方法。

我想我可以把代码插入上面引用的中继器。

代码语言:javascript
复制
<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的前几行是:

代码语言:javascript
复制
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-数组结果,但是没有标题是数组标题,它们只是作为一行,大数组中的第一个数组处理。

所以,我真的想从零开始解决我的问题的第二部分--不指望一个完整的剪切和粘贴解决方案,但是如果有人能给我指明正确的方向,那就太好了。我没有使用j-查询,也不太了解php。然而,我不介意做大量的阅读,花时间让它自己工作,但我可以在正确的方向上做一点。

我发现的不完全csv数组函数如下所示。可能必须从战略入手:

代码语言:javascript
复制
<?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多个):

代码语言:javascript
复制
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
        )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-04 20:25:19

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

其次,我很想使用内置的php函数fgetcsv来解析csv文件。我不确定,但我猜可能会更快些。

据我所见,有两种方法可以做到这一点。第一种方法是简单地将需要的数据提取到包含所需值的关联数组中,使用hte标题行作为键值。因此,在从csv文件中获得了值数组之后,让我们将其命名为$imageMeta,您可以这样做:

代码语言:javascript
复制
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;
        }
    }
}

这是一种蛮力的方法,我会尝试拿出一些更优雅的东西给你看。

票数 0
EN

Stack Overflow用户

发布于 2013-05-05 15:55:34

看来Joe提供了一个很好的解决方案,它还通过使用相对路径而不是绝对的通过localhost/.

如果我有什么特别的问题,我会再发一次,然后关闭这个一般的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16365193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档