fromholdio/silverstripe-superlinker-targets 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

fromholdio/silverstripe-superlinker-targets

Composer 安装命令:

composer require fromholdio/silverstripe-superlinker-targets

包简介

A SilverStripe module providing basic link/target data objects built using the Superlinker foundation

README 文档

README

Basic link/target DataObjects built on SuperLinker foundation.

Overview

Provides a Target class that extends SuperLink for general-purpose link objects. Useful for:

  • Related links
  • Resource links
  • Navigation links
  • Any generic link collection

Requirements

  • SilverStripe Framework ^6.0
  • fromholdio/silverstripe-superlinker ^4.0.0

Installation

composer require fromholdio/silverstripe-superlinker-targets

Run dev/build:

vendor/bin/sake dev/build flush=1

Usage

Basic Usage

use Fromholdio\SuperLinkerTargets\Model\Target;

class Page extends SiteTree
{
    private static $has_many = [
        'RelatedLinks' => Target::class
    ];
}

CMS Fields

use Fromholdio\MiniGridField\MiniGridField;

public function getCMSFields(): FieldList
{
    $fields = parent::getCMSFields();

    $fields->addFieldToTab('Root.Links',
        MiniGridField::create('RelatedLinks', 'Related Links', $this)
            ->setLimit(10)
    );

    return $fields;
}

Templates

<% if $RelatedLinks %>
    <div class="related-links">
        <h3>Related Links</h3>
        <ul>
            <% loop $RelatedLinks %>
                <li>
                    <a href="$URL" $AttributesHTML>$Title</a>
                </li>
            <% end_loop %>
        </ul>
    </div>
<% end_if %>

Usage Examples

Example 1: Footer Links

namespace App\Extensions;

use Fromholdio\SuperLinkerTargets\Model\Target;
use SilverStripe\Core\Extension;

class SiteConfigExtension extends Extension
{
    private static $has_many = [
        'FooterLinks' => Target::class
    ];
}
SilverStripe\SiteConfig\SiteConfig:
  extensions:
    - App\Extensions\SiteConfigExtension

Template:

<footer>
    <nav class="footer-nav">
        <% loop $SiteConfig.FooterLinks %>
            <a href="$URL" $AttributesHTML>$Title</a>
        <% end_loop %>
    </nav>
</footer>

Example 2: Resource Links

class ResourcePage extends Page
{
    private static $has_many = [
        'ResourceLinks' => Target::class
    ];

    public function getValidResourceLinks(): ArrayList
    {
        return Target::excludeInvalidLinks($this->ResourceLinks());
    }
}

Template:

<% if $ValidResourceLinks %>
    <div class="resources">
        <h2>Resources</h2>
        <% loop $ValidResourceLinks %>
            <div class="resource-item">
                <a href="$URL" $AttributesHTML>
                    <strong>$Title</strong>
                    <% if $Description %>
                        <p>$Description</p>
                    <% end_if %>
                </a>
            </div>
        <% end_loop %>
    </div>
<% end_if %>

Example 3: Social Media Links

namespace App\Extensions;

use Fromholdio\SuperLinkerTargets\Model\Target;
use SilverStripe\Core\Extension;

class SiteConfigExtension extends Extension
{
    private static $has_many = [
        'SocialLinks' => Target::class
    ];
}

With Icons:

Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - Fromholdio\SuperLinker\Extensions\SuperLinkIconExtension

Template:

<div class="social-links">
    <% loop $SiteConfig.SocialLinks %>
        <a href="$URL" target="_blank" rel="noopener" class="social-link">
            <% if $Icon %>
                <img src="$Icon.URL" alt="$Title">
            <% else %>
                $Title
            <% end_if %>
        </a>
    <% end_loop %>
</div>

Example 4: Card Links with Images

Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - Fromholdio\SuperLinker\Extensions\SuperLinkImageExtension
    - Fromholdio\SuperLinker\Extensions\SuperLinkDescriptionExtension
class HomePage extends Page
{
    private static $has_many = [
        'FeatureCards' => Target::class
    ];
}

Template:

<div class="feature-cards">
    <% loop $FeatureCards %>
        <a href="$URL" class="card">
            <% if $Image %>
                <img src="$Image.FocusFill(400,300).URL" alt="$Title">
            <% end_if %>
            <div class="card-content">
                <h3>$Title</h3>
                <% if $Description %>
                    <p>$Description</p>
                <% end_if %>
            </div>
        </a>
    <% end_loop %>
</div>

Customization

Adding Custom Fields

Extend the Target class:

namespace App\Extensions;

use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\TextField;
use SilverStripe\Core\Extension;

class TargetExtension extends Extension
{
    private static $db = [
        'CustomField' => 'Varchar(255)'
    ];

    public function updateCMSFields(FieldList $fields): void
    {
        $fields->addFieldToTab('Root.Main',
            TextField::create('CustomField', 'Custom Field')
        );
    }
}
Fromholdio\SuperLinkerTargets\Model\Target:
  extensions:
    - App\Extensions\TargetExtension

Creating Subclasses

For specific use cases, create subclasses:

namespace App\Model;

use Fromholdio\SuperLinkerTargets\Model\Target;

class SocialLink extends Target
{
    private static $table_name = 'App_SocialLink';

    private static $singular_name = 'Social Link';
    private static $plural_name = 'Social Links';

    private static $allowed_types = [
        'external'
    ];
}

Alternative for New Projects

Instead of using this module, create your own link classes:

namespace App\Model;

use Fromholdio\SuperLinker\Model\SuperLink;

class Link extends SuperLink
{
    private static $table_name = 'App_Link';

    private static $singular_name = 'Link';
    private static $plural_name = 'Links';
}

This gives you full control without an extra dependency.

Documentation

For complete SuperLinker documentation, see:

License

BSD-3-Clause

Support

fromholdio/silverstripe-superlinker-targets 适用场景与选型建议

fromholdio/silverstripe-superlinker-targets 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 814 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 07 月 19 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「link」 「silverstripe」 「button」 「CTA」 「superlinker」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 fromholdio/silverstripe-superlinker-targets 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 fromholdio/silverstripe-superlinker-targets 我们能提供哪些服务?
定制开发 / 二次开发

基于 fromholdio/silverstripe-superlinker-targets 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 814
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 13
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: BSD-3-Clause
  • 更新时间: 2020-07-19