1. Kem_Tun_28

    Kem_Tun_28 NopMember

    28/10/14
    #1
    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
    Đang tải...
    • ngày tạo

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

      Kem_Tun_28 30/10/14
    • 2,274

      lượt xem

    • 6

      trả lời

    • 2

      lượt thích

  2. An Nguyen

    An Nguyen bụi Ban quản trị

    28/10/14
    #2
    ngon, hóng thôi :D
     
  3. An Nguyen

    An Nguyen bụi Ban quản trị

    29/10/14
    #3
    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 NopMember

    29/10/14
    #4
    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ị

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

    hunter NopMember

    30/10/14
    #6
    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.jpg
      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 NopMember

    30/10/14
    #7
    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
Đã lưu nháp Draft deleted
Đang tải...