Thursday, September 09, 2010

Viewing Category


My modules and demos

Giới thiệu các module của mình viết ^_^

    23

    Cách đây mấy ngày, mình có nói về cách mình nghĩ để giải quyết vụ link tiếng Việt. Đó chỉ là đường vòng thôi. ^_^ Và mình mới viết 1 module đơn giản để làm điều này.

    Nó chỉ có 1 button để thực hiện thao tác đổi tên. Những link nào bị đổi tên thì sẽ được đưa vào list box.

    Mình viết nó trên DNN 5.1.0. Không rõ nó có thể chạy được trên DNN version 4x không nữa. Mình nghĩ chắc không sao vì không có gì đặc biệt cả.

     

    [Read the rest of this article...]

    14
    Hôm nọ, mình tình cờ biết được một dll file dùng convert 1 trang HTML thành pdf. Thử test và thấy cũng khá hay. Do đó mình viết demo trên 1 module Dotnetnuke. Xin chia sẻ cùng mọi người.
    Module chỉ có 2 textbox để nhập link của trang mà ta muốn convert và nhập tên file output. Code thì mình dùng sẵn code của trang đó cung cấp.
    using ExpertPdf.HtmlToPdf;
    void MyConvert()
            {           
                PdfConverter pdfConverter = new PdfConverter();
     
                pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
                pdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Normal;
                pdfConverter.PdfDocumentOptions.ShowHeader = true;
                pdfConverter.PdfDocumentOptions.ShowFooter = true;
                pdfConverter.PdfDocumentOptions.LeftMargin = 5;
                pdfConverter.PdfDocumentOptions.RightMargin = 5;
                pdfConverter.PdfDocumentOptions.TopMargin = 5;
                pdfConverter.PdfDocumentOptions.BottomMargin = 5;
                pdfConverter.PdfDocumentOptions.GenerateSelectablePdf = true;

     

    [Read the rest of this article...]

    06

    Như mình đã nói trong các bài trước, rồi phải có lúc mình phải viết 1 custom module cho phần Registration. Mất hơn 2 ngày trời, vượt qua sự lười biếng, cuối cùng mình cũng viết xong 1 module Registration. Đây chỉ là module dạng draft, cố gắng copy 1 số step cơ bản của module Registration của DNN. Để sử dụng thêm thì các bạn cần viết thêm để đáp ứng yêu cầu người dùng nhé.

    Module của mình có thể cho phép người dùng đăng ký account mới. Nó cũng có thể cho phép update thông tin account.
    Để sử dụng, các bạn cần thiết lập lại để DNN site sử dụng module này. Cách làm thì mình có hướng dẫn trong các bài viết trước trong category Profile. Các bạn chịu khó tìm và đọc nếu chưa biết cách.

    [Read the rest of this article...]

    01

    Module MyPhotoViewerModule đã được mình chỉnh lại cho đàng hoàng hơn. Code được sửa lại. Và có thêm tính năng mới. Version code chỉ dạng như demo. Nên mình viết lúc đó cũng ẩu quá. T_T

    Những sự thay đổi gồm có:
    -Các code lấy được dẫn được viết dynamic hơn. Bạn có thể cài đặt mà không cần sửa code nữa.
    -Có thể thêm 1 image mới bằng cách add new file từ local lên và nó sẽ được cập nhật vào list. Cách cũ là bạn phải tự bẳng cách nào up hình lên rồi chỉnh lại thong tin trong xml file. Bây giờ thì bạn có thể làm 2 cách.
    -Filter chỉ cho upload hình thôi, có dạng gif, jpg, jpeg, png, bmp.
    -Code clean hơn.
    Code được upload lên trang download của site.

    [Read the rest of this article...]

    20

    Module MyLatestBlog mới được chỉnh sửa lại 1 chút ở phần stored procedure. Version trước bị lỗi là vẫn hiển thị entry dù nó chưa được published. Mình đã chỉnh lại lỗi trên.

    Code đã được up lên trang download.

    [Read the rest of this article...]

    18

    Mình vừa chỉnh sửa lại module này 1 chút.

    Những thay đổi:
    -Cho phép tag là 1 cụm từ.
    -Nhập nhiều cụm cùng 1 lúc thì phân tách nhau bằng dấu ;
    Module đã được up lên trang download. ^_^

    [Read the rest of this article...]

    10

    Như đã nói trong các serial bài về Flash trong Dotnetnuke trước, hôm nay mình release module MyPhotoViewer. Đây là module hiển thị hình ảnh dưới dạng Flash.

    Code Flex của module được mình lấy từ ví dụ photoviewer của Flex 2. Mình có chỉnh sửa code 1 chút cho phù hợp. Nó có 3 dạng view là Carousel, Slide Show, List View.
    Để sử dụng, các bạn hãy down và cài đặt nó. Link các hình ảnh được đặt trong file galleries.xml trong thư mục data. Người dùng có thể chỉnh sửa nó khi vào phần edit. Lưu ý là cần phải xác định rõ đường dẫn tới file. Ví dụ như:
    http://localhost:2493/DNNWorking3/Portals/0/tre_em1.jpg
    Ở đây, mình đã để file trong trong thư mục Portals của site trong localhost. Nếu bạn không xác định rõ đường dẫn thì module sẽ không hiểu được.
    Do làm vội vã, nên module vẫn chưa thật sự hoàn chỉnh. Code Flash do lúc trước mình nghịch lung tung nên có 1 số effect nhưng mình lười sửa quá. T_T
    Code đã được upload trên trang download của site.

    [Read the rest of this article...]

    04

     

    Mình mới làm xong module MyLatestBlogCommentModule và chia sẻ cho mọi người. ^_^ Khi mình vào một số site dạng blog, mình có thấy nó list những comment mới nhất của blog. Mình cũng bắt chước có y như vậy. Thế là dành 1-2 ngày để làm. ^_^
    Về cơ bản, để sử dụng, bạn cần nhập thông tin vào phần settings là blog ID và số item bạn muốn view. Do module này chỉ phục vụ mục đích cá nhân nên có lẽ sẽ có những chỗ chưa kiểm tra hết. T_T Các bạn có thể down tại trang download. ^_^

    [Read the rest of this article...]

    10

    Thấy trên 1 vài site, họ có phần testimonials. Các text này hiện lần lượt trong vài giây. Mình cũng muốn làm 1 module giống như vậy để hiện những câu tục ngữ…

    Code javascript được lấy từ www.dynamicdrive.com. Những đoạn text được đặt trong xml file. Do đó dễ dàng để chỉnh sửa. Về giao diện thì người sử dụng có thể dễ dàng chỉnh sửa trong file css.
    Để nâng cấp module, developer còn có thể viết thêm để chèn hình ảnh vào, các link…

    [Read the rest of this article...]

    20
    Trong demo này, mình tạo 1 table lấy dữ liệu là thông tin các user và hiển thị ra. Khi move chuột lên 1 row nào thì sẽ hiện lên 1 hình minh họa. Do đây chỉ là demo nên module này làm khá sơ sài.
    Đầu tiên, ta xem xét code aspx:
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:SiteSqlServer %>" SelectCommand="SELECT [UserID], [Username], [FirstName], [LastName], [Email] FROM [Users]"></asp:SqlDataSource>
     
    <asp:GridView ID="gvNotes" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" EmptyDataText="There are not any notes on this account." Font-Size="0.85em" GridLines="Horizontal" Width="100%" BorderWidth="0px" CellPadding="4" DataKeyNames="UserID" HorizontalAlign="Center" PageSize="4" OnRowDataBound="gvNotes_RowDataBound">
    <Columns>
    <asp:BoundField DataField="UserID" HeaderText="UserID" InsertVisible="False" ReadOnly="True" SortExpression="UserID" Visible="False" />
     
    <asp:BoundField DataField="Username" HeaderText="Username" SortExpression="Username" />
     
    <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
     
    <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
     
    <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
     
    </Columns>
     
    <PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
     
    <HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
     
    <AlternatingRowStyle CssClass="alternatingRow" HorizontalAlign="Left" VerticalAlign="Middle" />
     
    <RowStyle HorizontalAlign="Left" VerticalAlign="Top" />
    </asp:GridView>
     
    <div id="dhtmltooltip1s" style="background-color:Blue">abc</div>
     
    Mình tạo 1 SqlDataSource object để lấy dữ liệu từ database. Sau đó, mình tạo 1 gridview. Và cuối cùng, các bạn sẽ thấy có 1 div với id l�dhtmltooltip1s. Nó được dùng để hiển thị tooltip.
    Tiếp theo, ta đi vào code behind. Ở trong pageload, ta phải include javascript vào.
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                Try              
                    ClientAPI.RegisterClientScriptBlock(Me.Page, "tooltip.js", "<script src=""" & ResolveUrl("tooltip.js") & """></script>")
                Catch exc As Exception        'Module failed to load
                    ProcessModuleLoadException(Me, exc)
                End Try
            End Sub
    Khi bind các row của gridview, ta sẽ add 1 attribute vào từng row.
    Protected Sub gvNotes_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles gvNotes.RowDataBound
                'Create pop up tool tip
                If e.Row.RowType = DataControlRowType.DataRow Then
                    Dim s As String
                    s = ResolveUrl("nature_1.jpg")
                    e.Row.Attributes.Add("onmouseover", "ShowTip('" & s & "')")
                    e.Row.Attributes.Add("onmouseout", "HideTip()")
                End If
            End Sub
     
    Có 2 event được gán là onmouseover và onmouseout. Hàm ShowTip được gán value là đường link tới image mà ta muốn hiển thị. Các bạn cũng có thể gán các giá trị khác. Tuy nhiên, nên nhớ là không nên gán các html code vào là parameter của ShowTip.
    Bây giờ ta đi tới javascript code. Code của tootip này được mình lấy từ site www.dynamicdrive.com. Mình chỉ thay đổi 1 chút để có thể sử dụng trên Dotnetnuke. Trong đó, cần lưu ý hàm sau:
    function ShowTip(ttipText)
    {
          ttipObj.innerHTML="<img src='"+ ttipText+"'/>";
          ttipObj.style.display="block";
          return false;
    }
    Ta tạo 1 image và đặt vào object. Nếu các bạn muốn tooltip của mình phức tạp hơn thì đưa nhiều parameter vào hơn. Và giá trị đưa vào ttipObj.innerHTML phải phức tạp hơn.

     

    [Read the rest of this article...]

    19
    Hôm trước, mình đã viết 1 demo nhỏ minh họa việc chạy jQZoom trên Dotnetnuke module. Tuy nhiên, các link đều được fix hết. Hôm nay, mình sẽ viết 1 demo khác, mà dữ liệu được lấy từ file XML. Các bạn có thể đặt các file trong 1 thư mục rồi chỉnh lại các đường link trong file XML.
    Code HTML bên ngoài thì mình đặt 1 datagrid:
    <asp:DataGrid runat="server" ID="drg" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateColumn HeaderText="Images">
            <ItemTemplate>
                <img runat="server" src='<%# Eval("Src") %>' class="jqzoom" alt='<%# Eval("Alt") %>' />
            </ItemTemplate>
        </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    <span style="float:left;width:100%;height:200px;">&nbsp;</span>
     
    Ngoài ra các bạn nhớ cũng phải copy các javascript cho jQuery.
    Trong code behind, thì ta cũng phải viết lệnh include các script. Ta sử dụng hàm đọc file XML đã được bàn trong article trước đó.
    private void ReadXML1()
            {
                if (File.Exists(strImageXMLFilePathInServer) == true)
                {
                    //Label1.Text = "File co ton tai 1";
                }
                else
                {
                    //Label1.Text = "File ko ton tai =>ko doc";
                    return;
                }
     
                XmlTextReader textReader = new XmlTextReader(strImageXMLFilePathInServer);
     
                textReader.Read();
     
                // If the node has value
                int i=0;
                int count=0;
                PicObject temp=new PicObject();
                while (textReader.Read())
                {
                    XmlNodeType nType = textReader.NodeType;
                    // If node type us a declaration
                    // if node type is an element
                    if (nType == XmlNodeType.Element)
                    {
                    }
                    if (nType == XmlNodeType.Text)
                    {
                        if(i==0)
                        {
                            temp=new PicObject();
                            temp.Src=textReader.Value.ToString();
                        }
                        else
                        {
                            temp.Alt=textReader.Value.ToString();
                           
                            arrPics.Add(temp);
                           
                        }
                        i++;
                        if(i==2)
                        {
                            i=0;
                        }
                    }
                }
            }
     
    Ở bên Edit, mình tạo phần cho phép chỉnh sửa nội dung file XML. Các hàm đã được đề cập trong article làm việc với XML trước đó. Các bạn có thể đọc lại.

     

    [Read the rest of this article...]

    18
    Trong bài viết lần trước, mình có nói về link hướng dẫn sử dụng jQZoom. Mình đã thử chạy nó trên Dotnetnuke module. Xin chia sẻ cho các bạn cách cài đặt để chạy trên DNN.
    -Đầu tiên, các bạn nên copy các file thư viện theo link mình đưa hôm nọ.
    -Copy cái ví dụ mẫu của nó về.
    -Tạo module trong DNN, ví dụ là MyZoomEx.
    -Đặt các file javascript vào thư mục js trong module.
    -Đặt các picture vào thư mục images trong module.
    -Copy các rule trong jqzoom.css vào module.css.
    -Trong code behind, include các js bẳng code như sau:
    protected void Page_Load(System.Object sender, System.EventArgs e)
            {
                if (!ClientAPI.IsClientScriptBlockRegistered(this.Page, "jquery.js"))
                {
                    ClientAPI.RegisterClientScriptBlock(this.Page, "jquery.js", "<script src='" + ResolveUrl("js/jquery.js") + "'></script>");
                }
     
                if (!ClientAPI.IsClientScriptBlockRegistered(this.Page, "jquery.lightbox-0.4.pack.js"))
                {
                    ClientAPI.RegisterClientScriptBlock(this.Page, "jquery.lightbox-0.4.pack.js", "<script src='" + ResolveUrl("js/jquery.lightbox-0.4.pack.js") + "'></script>");
                }
     
                if (!ClientAPI.IsClientScriptBlockRegistered(this.Page, "jjquery.jqzoom.js"))
                {
                    ClientAPI.RegisterClientScriptBlock(this.Page, "jquery.jqzoom.js", "<script src='" + ResolveUrl("js/jquery.jqzoom.js") + "'></script>");
                }
     
                ClientAPI.RegisterStartUpScript(this.Page, "", "<script type=\"text/javascript\">jQuery.noConflict();</script>");
     
                if (!Page.IsPostBack)
                {
                }
            }
     
    Trong .ascx, đặt các code html và js
    <script type="text/javascript">
    alert(document.location);
    jQuery.noConflict();
    jQuery(document).ready(function(){
    jQuery("img.jqzoom").jqueryzoom({
                            xzoom: 200, //zooming div default width(default width value is 200)
                            yzoom: 200, //zooming div default width(default height value is 200)
                            offset: 10 //zooming div default offset(default offset value is 10)
                            //position: "right" //zooming div position(default position value is "right")
                      });
    });
    </script>
     
    <div id="wrapper">
                <div id="maincontent">
                                                                                       
                            <p>Move the mouse over the images. | <a HREF="http://www.visual-blast.com/javascript/jqzoom-jquery-plugin/">Back to the Article page</a></p>
                            <div style="float:left;width:100%;clear:both;"><span class="tozoom"><img src="/DNNWorking3/DesktopModules/MyZoomEx/images/shoe1_small.jpg" class="jqzoom" alt="/DNNWorking3/DesktopModules/MyZoomEx/images/shoe1_big.jpg" /></span>
                            <span class="tozoom"><img src="/DNNWorking3/DesktopModules/MyZoomEx/images/shoe2_small.jpg" class="jqzoom" alt="/DNNWorking3/DesktopModules/MyZoomEx/images/shoe2_big.jpg" /></span>
                            <span class="tozoom"><img src="images/shoe3_small.jpg" class="jqzoom" alt="images/shoe3_big.jpg" /></span>
                            <span class="tozoom"><img src="/DNNWorking3/DesktopModules/MyZoomEx/images/shoe4_small.jpg" class="jqzoom" alt="../DesktopModules/MyZoomEx/images/shoe4_big.jpg" /></span>
                    </div>
    abd
                 <span style="float:left;width:100%;height:200px;">&nbsp;</span>
                </div>
    </div>
     
    Có 1 điều cần lưu ý ở đây là ta phải đặt đường dẫn tới file image 1 cách chính xác và đầy đủ. Ở đây mình đã phải khai báo cả tên project
    /DNNWorking3/DesktopModules/MyZoomEx/images/shoe1_small.jpg
    Nếu bỏ /DNNWorking3 ra thì không hiển thị hình được. T_T Do đó bạn sẽ không thấy hình ở hình thứ 3 và thứ 4. Ngoài ra các image phải có class="jqzoom". Nếu không thì image không có zoom được.
    Để hiện zoom của 1 image, cần phải có 2 image. Một cái để hiện thị bình thường. Một cái được dùng để zoom bên cạnh.

    [Read the rest of this article...]

    11
    Mấy hôm trước, trên forum của mình có bạn hỏi về cách làm sao để khi 1 user truy xuất vào site của mình mà chưa login thì site redirect tới trang login. Cách settings sao trên site thì mình không biết. Nhưng mình nghĩ ra cách tạo 1 module đơn giản để làm việc đó. Module này sẽ kiểm tra xem user vào đã login chưa. Nếu chưa thì trỏ tới trang login.
    Đây là 1 module đơn giản thôi. Tuy nhiên có 1 số điều cần bạn cài đặt trước khi chạy.
    -Ban đầu, bạn phải install nó trước.
    -Cài nó trên trang Defaul trước.
    -Vào phần settings, nhập giá trị tabID của trang login của bạn. Để biết được giá trị này, bạn chỉ cần click vào link login trên site thì sẽ biết được. Ví dụ nhé:
    http://localhost:2493/DNNWorking3/Home/tabid/36/ctl/Login/Default.aspx
    Thì tabID ở đây là 36.
    -Nhấn update.
    Để khi user khi chưa đăng nhập mà view bất cứ trang nào cũng bị redirect tới login page thì:
    -Vào settings->Module Settings->Advanced Settings.
    -Chọn Display module on all pages.
    -Click update.
    Còn điều này nữa, bạn không nên để user bình thường thấy module này vì trông không đẹp về mặt thẩm mĩ. Bạn có thể làm các bước sau:
    -Vào Settings->Basic Settings.
    -Bỏ chọn Inherit View Permission from Page.
    -Bảo đảm rằng chỉ có Admin có quyền View và Edit.
    -Click update.
    Các bạn có thể down module này trên trang download của forum. ^_^

    [Read the rest of this article...]

    30

    Phát triển tiếp từ module MyIP mình đưa ra trước kia, trong module này sẽ có phần management các IP. Admin có thể view được những IP đã vào trong ngày. Rồi có thể send email báo cáo. Cũng khá đơn giản thôi. ^_^

    [Read the rest of this article...]

    29

    Sáng nay, lên www.snowcovered.com/snowcovered2, thấy có người rao bán module cấm người dùng right click lên site của mình với giá 10usd. Tức quá mình thử làm 1 module giống như vậy. ^_^

    Mục đích của module này là không cho người dùng click chuột phải lên bất cứ phần nào của site. Do đó họ không thể copy hình ảnh hay text trên site của bạn. Module này thực ra khá đơn giản. Mình đã copy code javascript code từ địa chỉ sau: www.dynamicdrive.com/dynamicindex9/noright.htm
    Rồi sau đó mình đã đưa code lên module DNN.

    Để sử dụng, các bạn chỉ việc install và đưa lên page mà bạn muốn cấm người dùng right click. Hãy unable phần Display container để dấu module đi trong phần module settings. Các bạn cũng có thể sửa đoạn text hiện thông báo bằng cách vào trang View…ascx để sửa lại vì đây chỉ là javascript code.

    [Read the rest of this article...]

    Page 1 of 2First   Previous   [1]  2  Next   Last   
    HomeTrangITForum
    Copyright 2010 by Nguyễn Minh ĐứcDesigned by DyNNamiteTerms Of UsePrivacy Statement