1. Kem_Tun_28

    Kem_Tun_28 Gà tre

    Tối qua bận, giờ mới up được:

    B1: Zô SQL > CSDL của web > dpo.Picture > Chọn Design > Thêm trường FullUrl - nvarchar(Max) - Allow Nulls

    B2: Zô Nop.Core > Domain > Media > Picture.cs :
    - Bên trong:
    public partial class Picture : BaseEntity
    {
    .............
    }
    + Thêm dòng này:
    public string FullUrl { get; set; }

    B3: Zô Nop.Sevices > Media > IPictureService :
    - Bên trong:
    public partial interface IPictureService
    {
    .............
    }
    + Thêm dòng này:
    Picture InsertPicture1(string mimeType, string fullUrl);

    B4: Zô Nop.Sevices > Media > PictureService :
    - Bên trong:
    #region Getting picture local path/URL methods
    ..........
    + Thêm hàm này:
    public virtual Picture InsertPicture1(string mimeType, string fullUrl)
    {
    mimeType = CommonHelper.EnsureNotNull(mimeType);
    mimeType = CommonHelper.EnsureMaximumLength(mimeType, 20);
    var picture = new Picture()
    {
    PictureBinary = this.StoreInDb ? new byte[0] : new byte[0],
    MimeType = mimeType,
    SeoFilename = CommonHelper.EnsureMaximumLength(fullUrl, 100),
    IsNew = true,
    FullUrl = fullUrl
    };
    _pictureRepository.Insert(picture);
    _eventPublisher.EntityInserted(picture);
    return picture;
    }
    + Vẫn ở trong này tìm hàm:
    public virtual string GetPictureUrl(..........)
    {
    .............
    }
    + Thay thế bằng:
    public virtual string GetPictureUrl(Picture picture,
    int targetSize = 0,
    bool showDefaultPicture = true,
    string storeLocation = null,
    PictureType defaultPictureType = PictureType.Entity)
    {
    string url = string.Empty;
    byte[] pictureBinary = null;
    if (picture != null)
    pictureBinary = LoadPictureBinary(picture);
    if (picture == null)
    {
    if (showDefaultPicture)
    {
    url = GetDefaultPictureUrl(targetSize, defaultPictureType, storeLocation);
    }
    return url;
    }
    string lastPart = GetFileExtensionFromMimeType(picture.MimeType);
    string thumbFileName;
    if (picture.IsNew)
    {
    DeletePictureThumbs(picture);

    //we do not validate picture binary here to ensure that no exception ("Parameter is not valid") will be thrown
    picture = UpdatePicture(picture.Id,
    pictureBinary,
    picture.MimeType,
    picture.SeoFilename,
    false,
    false);
    }
    lock (s_lock)
    {
    string seoFileName = picture.SeoFilename; // = GetPictureSeName(picture.SeoFilename); //just for sure
    if (targetSize == 0)
    {
    thumbFileName = !String.IsNullOrEmpty(seoFileName) ?
    string.Format("{0}_{1}.{2}", picture.Id.ToString("0000000"), seoFileName, lastPart) :
    string.Format("{0}.{1}", picture.Id.ToString("0000000"), lastPart);
    var thumbFilePath = GetThumbLocalPath(thumbFileName);
    if (!File.Exists(thumbFilePath))
    {
    File.WriteAllBytes(thumbFilePath, pictureBinary);
    }
    }
    else
    {
    thumbFileName = !String.IsNullOrEmpty(seoFileName) ?
    string.Format("{0}_{1}_{2}.{3}", picture.Id.ToString("0000000"), seoFileName, targetSize, lastPart) :
    string.Format("{0}_{1}.{2}", picture.Id.ToString("0000000"), targetSize, lastPart);
    var thumbFilePath = GetThumbLocalPath(thumbFileName);
    if (!File.Exists(thumbFilePath))
    {
    using (var stream = new MemoryStream(pictureBinary))
    {
    Bitmap b = null;
    try
    {
    //try-catch to ensure that picture binary is really OK. Otherwise, we can get "Parameter is not valid" exception if binary is corrupted for some reasons
    b = new Bitmap(stream);
    }
    catch (ArgumentException exc)
    {
    _logger.Error(string.Format("Error generating picture thumb. ID={0}", picture.Id), exc);
    }
    if (b == null)
    {
    //bitmap could not be loaded for some reasons
    return picture.FullUrl;
    }
    var newSize = CalculateDimensions(b.Size, targetSize);
    var destStream = new MemoryStream();
    ImageBuilder.Current.Build(b, destStream, new ResizeSettings()
    {
    Width = newSize.Width,
    Height = newSize.Height,
    Scale = ScaleMode.Both,
    Quality = _mediaSettings.DefaultImageQuality
    });
    var destBinary = destStream.ToArray();
    File.WriteAllBytes(thumbFilePath, destBinary);
    b.Dispose();
    }
    }
    }
    }
    if (picture.FullUrl != null) url = picture.FullUrl;
    else
    url = GetThumbUrl(thumbFileName, storeLocation);
    return url;
    }

    B5: Zô Nop.Admin > Controller > PictureController :
    - Bên trong:
    public partial class PictureController : BaseAdminController
    {
    ................
    }
    + Thêm hàm này:
    public JsonResult ReData(string url)
    {
    var picture = _pictureService.InsertPicture1("image/jpeg", url);
    return Json(new
    {
    success = true,
    pictureId = picture.Id,
    imageUrl = picture.FullUrl
    }, JsonRequestBehavior.AllowGet);
    }

    B6: Zô Nop.Admin > Views > Shared > EditorTemplates > Picture.cshtml :
    - Tìm dòng:
    else
    {
    <span id="@(clientId + "remove")" class="k-button" style="display:none;">@T("Admin.Picture.RemovePicture")</span>
    }
    <br />
    + Thêm đoạn này vào ngay sau:
    <img id="@(clientId + "img")" src=""/>
    <br />
    <input type="button" value="CKFinder Up" id="btnSelectImg" name="btnSelectImg" />
    <!--Config CKFinder-->
    <script src="@Url.Content("~/ckfinder/ckfinder.js")" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function () {
    $("#btnSelectImg").click(function () {
    var finder = new CKFinder();
    var temp='@(Url.Content("~/Admin/Picture/ReData"))';
    finder.selectActionFunction = function (fileUrl) {
    pre().src=fileUrl;
    $.ajax({
    url: temp,
    data:{"url":fileUrl},
    success: function (data){
    $("#@(clientId + "value") input").val(data.pictureId);
    }
    })
    };
    finder.popup();
    });
    });
    function SetFileField(fileUrl) {
    $('#ImageUrlssss').val(fileUrl);
    }
    function pre() { return document.getElementById("@(clientId + "img")");}
    </script>

    B7: Zô link: http://www.mediafire.com/download/gvvbs6a6156v8le/ckfinder.rar tải cái này về => Giải nén = Extra here sau đó :
    - Copy thư mục ckfinder vào Nop.Web
    - Copy các file trong ckfinder > bin vào Nop.Web > bin
    (Mở trong windows mà paste ko paste trong visual nhé !)

    B8: Rebuil lại Nop.Core, Nop.Sevices, Nop.Admin, Nop.Web
    - Xong, giờ vào tạo 1 sản phẩm mới, bên Tab Picture sẽ có thêm 1 nút "CKFinder Up" để up ảnh, tương tự bên chỗ up ảnh của danh mục
    - Ưu điểm của cái này là up ảnh vào thư mục nằm trong Nop.Web > Content .... mà ko up vào Database nhé
    - Bạn nào muốn bỏ nút up ảnh mặc định của nop thì cũng trong file Picture.cshtml tìm đoạn dưới này và xóa đi nhé:
    <div class="qq-upload-button-selector qq-upload-button">
    <div>@T("Common.FileUploader.Upload")</div>
    </div>
     
    Sửa lần cuối: 30/10/14
    2
    An Nguyenhunter thích bài này.
    An Nguyen hunter thích bài này
    • ngày tạo

      Kem_Tun_28 28/10/14
    • trả lời cuối

      Kem_Tun_28 30/10/14
    • 2,967

      lượt xem

    • 6

      trả lời

    • 2

      lượt thích

    Đang tải...
  2. An Nguyen

    An Nguyen bụi Ban quản trị

    ngon, hóng thôi :D
     
  3. An Nguyen

    An Nguyen bụi Ban quản trị

    Hay quá, ủa mà cái upload ảnh mặc định là lưu trực tiếp trong ổ cứng rồi mà, ở đường dẫn này nè Content\Images\Thumbs
     
  4. Kem_Tun_28

    Kem_Tun_28 Gà tre

    Nó là ảnh Thumb thôi anh ạ
     
    Sửa lần cuối: 29/10/14
  5. An Nguyen

    An Nguyen bụi Ban quản trị

    cả ảnh gốc cũng nằm trong đó luôn mà, anh thử rồi
     
  6. hunter

    hunter Gà tre

    ko ổn rồi, sao cái trang sản phẩm của mình toàn hiện ra ảnh gốc hết thế này ko có thumb đâu cả mà hình như nó ko tạo đc ảnh thumb , mình vào xem trong content\thumb thì mấy ảnh nhỏ nó mới tạo ra đều 0 byte, các bạn có bị lỗi vậy ko ?
     

    Các file đính kèm:

    • loi.
      loi.jpg
      Kích thước:
      155 KB
      Xem:
      399
    Sửa lần cuối: 30/10/14
  7. Kem_Tun_28

    Kem_Tun_28 Gà tre

    Umk, cái này mỗi lần gọi ra là ảnh gốc luôn
     
    1
    An Nguyen thích bài này.
    An Nguyen thích bài này
Mã xác nhận:
Đã lưu nháp Draft deleted
Đang tải...