【问题标题】:Codeigniter Display Image With Open Library APICodeigniter 使用开放库 API 显示图像
【发布时间】:2017-03-20 17:29:56
【问题描述】:

我正在从我的 MySQL 数据库中检索数据,并显示一个表格,其中包括:

  • item_id
  • item_image(空)
  • item_title
  • item_isbn(包含连字符)

到目前为止,我的代码可以正常工作,因为我能够检索数据并将其显示在一个简单的表格中。

到目前为止我的代码;

型号

class Items_model extends CI_Model {
    public function itemList() {
        $query = $this->db->query("SELECT * FROM item LIMIT 10");
        return $query->result_array();
    }        
}

查看

<table>
    <tr>
        <td><strong>ID</strong></td>
        <td><strong>Image</strong></td>
        <td><strong>Title</strong></td>
        <td><strong>ISBN</strong></td>
    </tr>
<?php foreach ($items as $item): ?>
        <tr>
            <td><?php echo $item['item_id']; ?></td>         
            <td><?php echo $item['item_image']; ?></td>   
            <td><?php echo $item['item_title']; ?></td>
            <td><?php echo $item['item_isbn']; ?></td>
        </tr>
<?php endforeach; ?>
</table>

控制器

class Items extends CI_Controller {
    public function index() {
        $data['items'] = $this->items_model->itemList();        
        $this->load->view('item_view', $data);
    }
}

我想使用图书的 ISBN,使用 Open Library Covers API 检索图书封面并填充 html 表中的图像字段。

显然,这可以通过使用以下 URL 模式来实现;

http://covers.openlibrary.org/b/isbn/0385472579-S.jpg

我在我的视图中尝试了以下代码,但它不起作用;

<td><img src="<?php echo ('http://covers.openlibrary.org/b/isbn/'. stripslashes($item['item_isbn']) .'-S.jpg');?>"/></td>

理想情况下,如果我也无法使用 Open Library API 检索图像,我想显示一个标准的“未找到图像”jpg,但我确信我可以自己完成这部分(希望如此! )。

任何建议都将不胜感激,对于 Codeigniter 来说非常新。

【问题讨论】:

    标签: php mysql codeigniter oop


    【解决方案1】:

    假设您的数据库中存储了有效的 ISBN,请将您的视图更改为以下内容:

    <table>
        <tr>
            <td><strong>ID</strong></td>
            <td><strong>Image</strong></td>
            <td><strong>Title</strong></td>
            <td><strong>ISBN</strong></td>
        </tr>
        <?php foreach ($items as $item): ?>
            <tr>
                <td><?php echo $item['item_id']; ?></td>
                <td><img src="http://covers.openlibrary.org/b/isbn/<?php echo $item['item_isbn']; ?>-S.jpg" /></td>
                <td><?php echo $item['item_title']; ?></td>
                <td><?php echo $item['item_isbn']; ?></td>
            </tr>
        <?php endforeach; ?>
    </table>
    

    如果未找到图像,则显示 1px x 1px 透明像素。

    所以显示图像的代码语法是:

    <img src="http://covers.openlibrary.org/b/isbn/<?php echo $item['item_isbn']; ?>-S.jpg" />
    

    Resulting screenshot from my test

    更新(如果未找到图像)

    根据文档:

    默认情况下,如果找不到封面,则返回空白图像。如果 您将 ?default=false 附加到 URL 的末尾,然后它返回 404 而是。

    要添加您自己的后备图片,您可以将此参数附加到图片 URL,然后检查该文件是否不存在。

    有多种方法可以检查文件是否存在。使用 curl 可能是最优雅的,但这里有一个......

    快速而肮脏的方法

    这将ternary operatorgetimagesize 函数结合使用来处理回退。为此,您需要确保在您的 PHP 版本中启用了 GD(图像处理库)支持。

    <img src="<?php echo (!getimagesize('http://covers.openlibrary.org/b/isbn/' . $item['item_isbn'] . '-S.jpg?default=false')) ? '/path/to/your-image.jpg' : 'http://covers.openlibrary.org/b/isbn/' . $item['item_isbn'] . '-S.jpg'; ?>" />
    

    将三元运算符的语法想象成内联 if/else 语句。

    【讨论】:

    • @johnny_s 如果您对我的回答感到满意,请您接受。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 2015-10-30
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多