برنامه نویسی

Umbraco: اضافه کردن رشته های پرس و جو سفارشی برای GetCropUrl()

من باید از Imgix برای ارائه تصاویر از Umbraco استفاده کنم. بسیاری از پارامترهای خارج از جعبه با اجرای فعلی Umbraco v13 (ImageSharp) عالی کار می کردند، مانند width و height، اما حالت برش کاملاً وجود نداشت.

به اندازه کافی ساده است، فقط اضافه کنید fit=crop به رشته پرس و جو اما چگونه آن را به عنوان یک پارامتر پیش فرض به رشته کوئری تولید شده از GetCropUrl() اضافه کنیم؟ مطمئنا شما می توانید با استفاده از آن تابع پارامترهای اختیاری اضافه کنید، اما اگر یک سایت از قبل موجود دارید، انجام آن و تغییر آن در همه جا امکان پذیر نیست.

راه حل من این بود که پیاده سازی IImageUrlGenerator، ImageSharpImageUrlGenerator را عوض کنم.

با گرفتن یک کپی از آن و قرار دادن آن در پروژه خود شروع کنید، سپس مقدار رشته کوئری را تغییر دهید. مانند:

using System.Globalization;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Web;
using SixLabors.ImageSharp.Web.Middleware;
using SixLabors.ImageSharp.Web.Processors;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Media;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Imaging.ImageSharp.ImageProcessors;
using static Umbraco.Cms.Core.Models.ImageUrlGenerationOptions;

namespace Your.Namespace
{
    public class CustomImageSharpImageUrlGenerator : IImageUrlGenerator
    {
        ... the rest of the original class implementation here...

        /// 
        public string? GetImageUrl(ImageUrlGenerationOptions? options)
        {
            // ... original function definition here

            // Add a custom query string
            queryString.Add("fit", "crop");

            return QueryHelpers.AddQueryString(options.ImageUrl, queryString);
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و اکنون باید پیاده سازی فعلی را با پیاده سازی خود جایگزین کنیم. این آهنگ به عنوان تک آهنگ در آهنگساز Umbraco ثبت شده است، بنابراین بیایید آن را در آهنگساز خودمان مرتب کنیم:

public class ImagingComposer : IComposer
{
    public void Compose(IUmbracoBuilder builder)
    {
        builder.Services.Replace(
          ServiceDescriptor.Singleton()
        );
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و بس! از قسمت جلویی بازدید کنید و جدید خود را خواهید دید مناسب param، مانند این:

https://localhost:44832/media/c0klecps/image.jpeg?width=1500&height=1100&v=1db5078d578e850&fit=crop&format=webp

کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا