1

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

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

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

首先,我将大量图像放在资产中并向页面添加了一个变量,因此我只需将图像引用(例如 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>

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

到目前为止,这基本上是一个柯比问题,这是我的问题开始的地方。

接下来,我想从中央 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
        )
4

2 回答 2

0

看起来乔提供了一个很好的解决方案,还从 https://gist.github.com/jaywilliams/385876获得了一些代码,通过使用相对路径而不是通过 localhost/...

如果我有一个特定的问题,我会再次发布并关闭这个一般问题

于 2013-05-05T15:55:34.510 回答
0

首先,我想说如果您在创建文件后不需要编辑文件,而您刚刚开始,那么使用 csv 文件是一种有效的方法。数据库引入了自己的一系列问题,例如安全性,使用 csv 文件更容易避免这些问题。只要确保所有文件都是只读的,就可以了。

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

据我所知,有两种方法可以做到这一点。第一种是简单地将您需要的数据提取到一个包含您需要的值的关联数组中,使用 hte 标题行作为键值。因此,从 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;
        }
    }
}

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

于 2013-05-04T20:25:19.203 回答