sudhaus7/shortlink

一个灵活的TYPO3 URL缩短器,包含FLUID ViewHelpers和Encodeservice

3.0.0 2023-03-14 12:03 UTC

This package is auto-updated.

Last update: 2024-09-14 15:16:35 UTC


README

一个TYPO3的URL缩短器

它做什么

此扩展将以类似bit.ly或类似服务的方式轻松创建缩短的URL。对于集成者来说,这意味着用于创建链接的常用Viewhelper已被扩展,并且缩短器可以透明地用于由FLUID Viewhelper创建的任何链接。

另外,还提供了一个Service类,可以创建动态缩短的URL,例如在插件或Extbase控制器中。

可用的FLUID Viewhelper

导入命名空间如下

<html
    xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers"
    xmlns:scl="http://typo3.org/ns/SUDHAUS7/Shortcutlink/ViewHelpers"
    data-namespace-typo3-fluid="true"
>

或者这样

{namespace scl=SUDHAUS7\Shortcutlink\ViewHelpers}

以下Viewhelper可用

  • uri.action
  • uri.external
  • uri.page
  • uri.typolink
  • link.action
  • link.external
  • link.page

这些Viewhelper具有所有属性,并且表现方式与它们的正常对应物相同,只是它们将生成缩短的URL

这意味着你现在可以用以下方式替换任何

<f:link.page pageId="15">The link</f:link.page>

简单地用以下内容替换

<scl:link.page pageId="15">The link</scl:link.page>

PHP中的使用

缩短URL的一个简单示例

$url = 'https://google.com/';
$shortener = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\SUDHAUS7\Shortcutlink\Service\ShortlinkService::class);
    
$shortener->setUrl($url);
$shortlink = $shortener->getShorturlWithDomain();

将缩短的URL锁定到前端用户

可以将前端用户ID锁定到缩短的URL上,这意味着缩短链接只能通过具有相同用户ID的前端用户会话打开。

为此,所有Viewhelper都有一个额外的属性 chainToUserid,它接受要连接的前端用户ID。

例如

<scl:link.page pageId="15" chainToUserid="42">The link</scl:link.page>

生成的缩短链接只能在ID为42的用户登录时打开。

PHP中的对应代码将是

$url = 'https://google.com/';
$shortener = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\SUDHAUS7\Shortcutlink\Service\ShortlinkService::class);
    
$shortener->setUrl($url);
$shortener->setFeuser(42);
$shortlink = $shortener->getShorturlWithDomain();

REST接口

在扩展设置中定义的入口点(默认:/goto/)可以用作创建、更新和删除缩短URL的RESTful接口API。

要启用此功能,您需要转到TYPO3后端,进入设置模块,并打开“配置扩展”对话框。

在这里,您将打开“shortcutlink”扩展的配置选项。

您将找到一个按钮“生成新的API密钥”。点击该按钮,将生成一个新的密钥。确保生成后立即复制,因为它无法恢复。然后保存配置。

现在,可以将此密钥用于POST、PUT和DELETE操作,只需将其作为名为“ApiKey”的HTTP请求头中的值添加即可。

要创建新的缩短URL,请使用不带密钥的POST方法在/goto/后。

以下是一个使用curl的示例

curl -X POST \
-d "url=https://google.com" \
-H "ApiKey: GTeZNuFWHfMxSTBf2krrasTCu9INcmHa5KwQ12uggDM" \
http://mysite/goto/

响应将是文本/plain格式的缩短链接URL。例如

http://mysite/goto/4J5tqQUkVnc

或者,您可以使用JSON编码的字符串作为负载,如果将Content-type设置为application/json。尽管如此,答案仍然是text/plain。

curl -X POST \
-d '{"url":"https://google.com"}' \
-H "Content-type: application/json" \
-H "ApiKey: GTeZNuFWHfMxSTBf2krrasTCu9INcmHa5KwQ12uggDM" \
http://mysite/goto/

负载中可能的字段有

  • url = 要缩短的URL(必需)
  • feuser = 此缩短码锁定到的前端用户ID(可选)

可能的返回代码有

  • 200 - 成功
  • 304 Forbidden - 当ApiKey错误或缺失时
  • 500 Invalid Payload - 当负载无效时

要更新缩短的URL,请使用PUT方法在缩短的URL上。PUT支持POST和PUT操作,支持JSON编码和查询编码的负载。

例如

curl -X PUT \
-d '{"url":"https://bing.com"}' \
-H "Content-type: application/json" \
-H "ApiKey: GTeZNuFWHfMxSTBf2krrasTCu9INcmHa5KwQ12uggDM" \
http://mysite/goto/4J5tqQUkVnc

在更新成功的情况下,主体将只包含OK。如果短链接被锁定给用户,则需要提供用户ID。只能更新URL,不能更新用户。

可能的返回代码有

  • 200 - 成功
  • 304 Forbidden - 当ApiKey错误或缺失时
  • 500 Invalid Payload - 当负载无效时
  • 404 - 如果短链接无效
  • 403 - 如果提供了一个feuser但与存储的用户不匹配

相应地,DELETE方法将删除一个短链接。DELETE不需要负载。

curl -X DELETE \
-H "ApiKey: GTeZNuFWHfMxSTBf2krrasTCu9INcmHa5KwQ12uggDM" \
http://mysite/goto/4J5tqQUkVnc

在成功删除的情况下,主体将只包含OK

可能的返回代码有

  • 200 - 成功
  • 304 Forbidden - 当ApiKey错误或缺失时
  • 404 - 如果短链接无效

待办事项:文档