所以我下载并非常喜欢开始使用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格式化和动画,并解析为花式框等。
- 我需要一段更好的代码从我的csv生成一个有效的数组。可能通过库存图书编号对结果进行索引
- 和一个方法来查询它,并解析出相关数组作为一个变量列表,以在注入中使用。
我想象我可以将代码注入到上面引用的重复器中。
<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/…使用相对路径而不是绝对路径来工作
如果我有特殊的问题,我会再次发布并关闭这个通用的