sjaakp/yii2-linktitles

在 Yii 2.0 PHP 框架中提取链接标题

1.0.1 2024-06-29 12:48 UTC

This package is auto-updated.

Last update: 2024-08-29 13:23:02 UTC


README

Latest Stable Version Total Downloads License

LinkTitles 是一个 Yii 2.0 小部件,用于为相对链接添加标题。当鼠标悬停在链接上时,标题将在工具箱窗口中弹出。标题通过 JSON 调用来从网站获取。如果链接已经有一个标题,则它将保持不变,不会被 LinkTitles 覆盖。

LinkTitles 的演示在这里 点击查看

安装

使用 Composer 以常规方式安装 yii2-linktitles。将以下内容添加到您的 composer.json 文件的 require 部分

"sjaakp/yii2-linktitles": "*"

或者运行

composer require sjaakp/yii2-linktitles

您可以通过 下载 ZIP 格式的源代码 手动安装 yii2-linktitles

先决条件

为了使 LinkTitles 正常工作,需要在网站的主要配置文件中的 urlManager 组件上进行一些设置,通常称为 web.phpmain.php,位于 config 目录中

    'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            '<c:[\w\-]+>/<id:\d+>' => '<c>/view',
            // other rules ...
        ],
        // ...

许多 Yii 2 网站已经有了这些设置。

使用 LinkTitles 小部件

在 Yii2 视图文件中使用 LinkTitles 小部件可能像这样简单

<?php
use sjaakp\linktitles\LinkTitles;
?>
    ...
    <?php LinkTitles::begin() ?>
        <p>Some HTML containing several relative links... </p>
    <?php LinkTitles::end() ?>
    ... 

begin()end() 之间的 HTML 可以是您想要的任何复杂性。

在加载视图时,LinkTitles 会尝试通过修改后的 href 使用 JSON 调用来检索所有相对链接的标题。如果链接的 href/message/42,则 LinkTitles 会调用 /message/link-title/42。网站应返回 JSON 格式的标题,如下所示

{ "title": "The title of Message 42" }

完成此操作的一种方法是通过使用 LinkTitleAction 向控制器添加一个名为 link-title 的操作,如下所示

<?php
use sjaakp\linktitles\LinkTitleAction;
use yii\web\Controller;
use app\models\Message;

class MessageController extends Controller
{
    ...
    public function actions()
    {
        return [
            'link-title' => [
                'class' => LinkTitleAction::class,
                'model' => Message::class
            ]
        ];
    }
    ...
}
?>

这假设模型(Message)有一个包含链接标题的属性 title

如果链接标题保存在另一个属性中,例如 header,则将 LinkTitleActionattribute 属性设置为它的名称,如下所示

    public function actions()
    {
        return [
            'link-title' => [
                'class' => LinkTitleAction::class,
                'model' => Message::class,
                'attribute' => 'header'
            ]
        ];
    }

您也可以按照这些路线编写一个自定义函数来处理 link-title 功能

<?php

class MessageController extends Controller
{
    ...
    public function actionLinkTitle($id)
    {
        $model = Message::findOne($id);
        if ($model) {
            $title = <retrieve title from $model>
            $r = [ 'title' => $title ];
        }
        else $r = [];
        return $this->asJson($r);
    }
    ...
}