Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Kirby中查询图像库的CSV元数据_Arrays_Csv_Kirby - Fatal编程技术网

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

Arrays 在Kirby中查询图像库的CSV元数据,arrays,csv,kirby,Arrays,Csv,Kirby,因此,我下载了Kirby,并非常喜欢开始使用Kirby 对于那些不熟悉它是一个基于文件的cms 作为标准,您可以在一个目录(例如site/number1)中放置一组图像,它将在一个名为site.com/number1的页面上为您创建一个图库。如果您的一幅图像名为example.jpg,您可以创建一个名为example.txt的文件,并将与该图像相关的内部信息(如标题、日期等)放入其中 我对为每个单独的图像创建一个文本文件并将图像分散在服务器的页面文件夹中的想法并不完全满意 首先,我在assets

因此,我下载了Kirby,并非常喜欢开始使用Kirby 对于那些不熟悉它是一个基于文件的cms

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

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

首先,我在assets中放置了大量图像,并在页面中添加了一个变量,因此我只需要将图像引用(例如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>
我真的不知道如何结束这一切。我知道这可能不是很难,但我不是专家,在处理数组时肯定不是。工作表在服务器上,我使用一些php打印了csv数组结果,但是没有标题作为数组标题,它们只是作为一行处理,这是较大数组中的第一个数组

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

我找到的完整csv数组函数如下所示。可能必须从stratch开始:

<?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>';
?>

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

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

就我所知,有两种方法可以做到这一点。第一种方法是使用头行作为键值,将所需数据提取到包含所需值的关联数组中。因此,从csv文件中获取了您的值数组,我们将其命名为$imageMeta,您可以执行以下操作:


这是一种蛮力方法,我将尝试提出一些更优雅的方法供您参考。

看起来Joe提供了一个很好的解决方案,也从中获得了一些代码 通过localhost/使用相对路径而不是绝对路径来工作


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

这里有一个并行字符串供kirby用户使用,这可能是一个非常类似的问题。我是不是应该在头上敲一下,然后移到db。我并不特别需要从服务器编辑cvs。谢谢Joe,我已经试着使用gist hub的这段代码,但是我没有成功,因为我使用了一个不正确的路径版本,即“.”。不是相对的。现在它工作得很好。我将处理这个查询并发布到gist hub,看看是否还有其他人想使用或改进它。嗨,Craig,我的解决方案有效吗?如果你能接受答案,我将不胜感激。感谢这是因为在处理文件时,您需要使用服务器上的路径,而不是url路径。文件的url为,但服务器上的路径可能类似于linux服务器上的/var/www/peterliddle/assets/artistswork/imagemeta.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
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>';
?>
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
        )
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;
        }
    }
}