All posts by admin

วิธี Select Data เพื่อเอา String ไปใส่ค่า Textbox

string strConn = WebConfigurationManager.ConnectionStrings[“CPSConnectionString”].ConnectionString;
string sql = “SELECT Crop_ID FROM Crop WHERE (Agriculturist_ID ='” + Agri_IDTextbox.Text + “‘and Age_Rubber ='” + ageRubberstxt.Text + “‘)”;
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
SqlCommand com = new SqlCommand(sql, conn);
SqlDataAdapter sa = new SqlDataAdapter(com);
DataSet ds = new DataSet();
sa.Fill(ds);

for (int i = 0; i <= ds.Tables[0].Rows.Count – 1; i++)
{
for (int j = 0; j <= ds.Tables[0].Columns.Count – 1; j++)
{
if (j == 0)
{
cropID = ds.Tables[0].Rows[i][j].ToString();
}
}
}
conn.Close();

Code ShowMessageBox C# .Net

protected void ShowMessageBox(string message)
{
message = message.Replace(“\r\n”, “”);
message = message.Replace(“\\”, @”\\\\”);
message = message.Replace(“‘”, “\\'”);

string sJavaScript = “<sck [ript language=javascript>\n”;
sJavaScript += “alert(‘” + message + “‘);\n”;
sJavaScript += “</script>”;
ClientScript.RegisterStartupScript(Page.GetType(), “MessageBox”, sJavaScript);
}

 

เวาเรียกใช้ก็ ShowMessageBox(“Test”) แค่นี้ก็ได้  MessageBox คอย Alert เเล้วครับ

Code Import Excel C#

protected string CurrentPage
{
get
{
System.IO.FileInfo fileInfo = new System.IO.FileInfo(this.Page.Request.PhysicalPath);
return fileInfo.Name;
}
}
private OleDbConnection exConn;//ติดต่อ Excel
private DataTable dt = null;//Table เก็บข้อมูล Excel
private string strConn;

protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
SetHeader(“อัพโหลดข้อมูล”);

}
}
protected void SetHeader(string header)
{
Label lblHeader = this.Master.FindControl(“lblHeader”) as Label;
lblHeader.Text = header;
}
protected void Button1_Click(object sender, EventArgs e)
{
GridView1.Visible = false;
Label5.Text = “”;
string file;
if (FileUpload1.HasFile)
{
file = FileUpload1.FileName;
if (FileUpload1.FileName.LastIndexOf(“.”) != -1 && FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf(“.”) + 1, 3) == “xls”)
{

FileUpload1.PostedFile.SaveAs(Server.MapPath(“..\\Uploads\\Employee\\”) + file);

this.Label1.ForeColor = this.Label4.ForeColor;
//Label1.Text = “File Saved to: ” + Server.MapPath(“..\\Uploads\\Personal\\”) + file;

ShowDatatoGrid(file);

FileInfo TheFile = new FileInfo(MapPath(“..\\Uploads\\Employee\\”) + file);
if (TheFile.Exists)
{
File.Delete(MapPath(“..\\Uploads\\Employee\\”) + file);
}
}
else
{
Label2.Text = “”;
Label5.Text = “”;
this.Label1.ForeColor = this.Label3.ForeColor;
this.Label1.Text = “ไฟล์ข้อมูลที่ต้องการอัพโหลด ต้องอยู่ในรูปแบบ Excel (.xls)”;
}

}
else
{
Label2.Text = “”;
Label5.Text = “”;
this.Label1.ForeColor = this.Label3.ForeColor;
this.Label1.Text = “กรุณาเลือกไฟล์เพื่ออัพโหลด”;
}
}
private void ShowDatatoGrid(string f)
{

try
{
GridView1.Visible = true;

this.strConn = @”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + Server.MapPath(“..\\Uploads\\Employee\\”) + f + @”;Extended Properties=””Excel 8.0;”””;

this.GridView1.DataSource = getWorksheet(“Sheet1$”);

this.GridView1.DataBind();

Label2.Text = “ข้อมูลทั้งหมด : ” + this.GridView1.Rows.Count + ” คน”;

}

catch (Exception ex)
{
this.Label1.ForeColor = this.Label3.ForeColor;
this.Label1.Text = ex.Message;

}

}
private DataTable getWorksheet(string worksheet)
{

DataSet m_ds = new DataSet();

try
{

exConn = new OleDbConnection(strConn);

exConn.Open();

OleDbDataAdapter m_da = new OleDbDataAdapter(“SELECT * FROM [” + worksheet + “] “, exConn);

m_da.Fill(m_ds, “Table”);

}

catch (Exception ex)
{
this.Label1.ForeColor = this.Label3.ForeColor;
this.Label1.Text = ex.Message + “”;

}

finally
{

exConn.Close();

}

if (m_ds.Tables.Count > 0)
{

return m_ds.Tables[0];

}

else
{

dt = new DataTable();

return dt;

}
}

future ใหม่ใน C# language

มีอะไรใหม่บ้างไปดูกันครับ

Mads Torgersen มีความเห็นเกี่ยวสองคำแนะนำคุณลักษณะภาษา UserVoice สังเกตว่าพวกเขาจะกระตือรือร้นทำโครงการดังกล่าว

หากคุณไม่ได้โหวตสำหรับคุณสมบัติของคุณต้องการมากที่สุด แต่คุณควรมุ่งหน้าไปยัง UserVoice ตอนนี้และลงมติไป (ยกเว้นกรณีที่คุณต้องการที่จะได้รับกลับ VB 6.0 ซึ่งในกรณีการแก้ไข

operator

นี้เป็นสิ่งที่สวยงามถ้าคุณถามฉัน การใช้งานง่ายพอถ้าคุณเขียน

var x= foo?.bar?.baz();

และ foo or bar  Null, x จะเป็น null ไป ในคำอื่น ๆ ที่คุณมักจะได้รับค่า nullable จากซัพพลายนี้ นี้จะทำให้มันง่ายที่จะกำหนดค่าเริ่มต้นของคุณเองโดยเพียงแค่การผนวก “? Y “สายแทนการพยายามที่จะคิดออกว่าเป็นศูนย์ที่คุณได้กลับมาที่เป็นค่าเริ่มต้นหรือมูลค่าที่แท้จริง

หนึ่งปัญหาเล็กน้อยกับคำแนะนำในปัจจุบันก็คือว่ามันจะทำงานหากคอมไพเลอร์รู้ว่าถ้าคุณมีประเภท nullable หรือไม่ ดังนั้นการแยกรหัส request ไปจะไม่ดีกับข้อเสนอแนะในปัจจุบันตั้งแต่ตัวแปรแบบไดนามิกของคุณชนิดของเอาความรู้ที่ได้จากคอมไพเลอร์

ต้นแบบในอีกไม่กี่เดือนข้างหน้าคือสิ่งที่ Mads Torgersen กล่าวในการตอบสนองของเขาสำหรับคำแนะนำ UserVoice

Default value on properties

ไม่เพิ่มเขตข้อมูลการสนับสนุน / การตั้งค่าในการสร้างเพียงเพื่อให้แน่ใจว่าสถานที่ให้บริการของคุณมีค่าเริ่มต้นที่ถูกต้อง ตอนนี้เราจะสามารถตั้งค่าในแถวที่สถานที่ให้บริการแทน

C#

 

1

public int X { get; set; } = x;

ดูง่ายพอ นอกจากนี้เราจะสามารถที่จะเขียน:

C#

 

1

public int Y { get; } = y;

นี้ควรจะเป็นเช่นเดียวกับ

C#

 

1

public int Y { get { return y; } }

การลดจำนวนของตัวอักษรที่เป็นเสมอดี แต่ส่วนตัวผมไม่สนใจว่ามากเกี่ยวกับกรณีโดยเฉพาะอย่างยิ่งที่

http://www.marketdogs.com/index.php/topic,485.0.html

1.  ถ้าทราบว่า ตัวเองกำลังมีใจให้เจ้าหมาที่หน้าตาคล้ายหมาป่ายังกะแกะ แต่นิสัยติงต๊องสุดๆ
กรุณาอย่าเข้าใกล้ ร้านจัดจำหน่ายสัตว์เลี้ยง อ่านนิตยสารหมา ใช่หรือไม่เข้าเว็บไซต์สัตว์เลี้ยงบ่อยครั้งเพราะว่า
กิเลสความรักเจ้าตัวแสบพันธุ์นี้ จะอาจจะทวีคูณยิ่งขึ้นเรื่อยๆ โดยไม่ค่อยรับรู้สาเหตุ ศัพท์ชาวบ้าน
เรียกว่า “หลงรักหัวปักหัวปำ”

2. ห้ามอ่านการ์ตูนเรื่อง “ยุ่งชะมัด เป็นสัตว์แพทย์” หรือดูหนังเรื่อง “Snow Dogs” เพราะคุณอาจจะ
หลงรัก “โจบิ” หรือบรรดาแก๊งหมาลากเลื่อนเข้าเต็มเปาและอาจเกิดอาการตามข้อที่ 1

3.  ถ้ายังอยากเลี้ยงและตัดสินใจแน่แล้วว่าจะเลี้ยงหมาพันธุ์นี้ โปรดเริ่มซ้อมวิ่งมาราธอน และ
วิ่งระยะสั้น อย่างน้อยวันละ 10 นาที ติดต่อกันอย่างน้อย 1 สัปดาห์ เพราะคุณจะได้คู่หูคู่ฮาที่วิ่ง
เร็วสวดๆ หากไม่แข็งแรงพอ อาจโดนลากฝุ่นกระจาย หอบเอาได้ง่ายๆ ใครเป็น
โรคหัวใจควรปรึกษาแพทย์ ก่อนเลี้ยงทุกครั้ง!

4. ถ้ารู้ตัวว่าบ้านรก หรือมีข้าวของเยอะแยะภายในบ้าน คุณมี 2 ทางเลือก หนึ่งคือ จัดและยกของ
ไว้สูงๆ เกินตำแหน่งที่สัตว์ประหลาด 4 ขา จะคาบได้ หรืออีกทางเลือกคือ ปล่อยตามยะถากรรม
ซึ่งเจ้าตัวแสบจะช่วยจัดการพังข้าวของคุณจนวินาศสันตะโร ซึ่งช่วยให้ของในบ้านคุณดูโล่งไปโดย
ปริยาย (เพราะมานกัดพังเรียบ ฮือๆๆๆ)

5. กรณีที่คุณมีหมาพันธุ์เล็กๆ อยู่ในบ้าน อาทิ พูเดิ้ล หรือยอร์คเชียร์ ท่านกำลังจะได้รับชมเกมกีฬาใหม่
“งับหัวแล้วเผ่น” นำแสดงโดยไซบีเรียนฮัสกี้ ซึ่งจะทำให้หมาๆ ตัวจิ๋วของคุณ เกิดอาการหวาดระแวง
ออกแนวโรคจิตหลอน จนแทบผูกคอตาย เพราะโดนก่อกวนทั้งวี่ทั้งวัน ไม่หยุดหย่อน โดยที่ไซบีเรียน
ฮัสกี้ มันจะคิดเองเออเองว่า คนอื่นกำลังเล่นอยู่ด้วย

6. ถ้ารู้ตัวว่าแพ้ขนสัตว์ หอบ หืด หรือรูจมูกตัน กรุณาหลบเลี่ยงไซบีเรียนฮัสกี้ เพราะเจ้าหมาพันธุ์นี้
ขนมันเยอะและร่วงเหมือนปุยนุ่น ร่วงไม่เว้นวันหยุดราชการ ท่านจะได้สนุกกับการใช้เครื่องดูดฝุ่นอย่าง
คุ้มค่าแทบทุกวัน T-T (หากท่านกำลังมีปัญหาดูดฝุ่น เราขอเสนอเครื่องดูดฝุ่นเทอร์โบ๋ไทเกอร์ ดูดทุก
ซอกทุกมุม หากคุณสนใจ โทรมาได้ที่ ทีวีหลอกแด๊ก ค่าจัดส่งทั่วประเทศ 02-555-5555)

7. สุภาษิต รักวัวให้ผูก รักลูก  ให้ตี ใช้กับหมาพันธุ์นี้ไม่ได้ผล อาจเพราะขนหนาตึ้บ มึนอีกต่าง
หาก แถมพอจะตีซักที (เล่นพังของทุกวัน) ก็จะออกอาการสำออยเหมือนจะตาย แล้วแอบฉวยโอกาสวิ่ง
หนีไปทำหน้าทะเล้น ฮึ่ม! ใครที่ว่าหมาพันธุ์นี้ออเซาะไม่เป็น ขอเถียงขาดใจ เวลาทำผิดมักจะแกล้งทำหน้า
บ้องแบ๊ว เหมือนเด็กถูกจับได้ว่าแอบกินหน้าขนมเค้ก แล้วค่อยๆ ตีหน้าเศร้า คลานมาอ้อนเอาหัวหนุนตรง
ตัก แล้วใครหน้าใหนจะโกรธมันลงได้อีก เฮ้ออออ…

8. จงอย่าคิดว่าหมาพันธุ์นี้จะรักบ้านช่องตัวเอง เพราะทันทีคุณเผลอเปิดประตูไม่ดูตาม้าตาเรือ เจ้าหน้าขน
อาจใส่เกียร์ 5 บวกเทอร์โบสปริ้นท์ วิ่งแน่บหายไปไม่เห็นฝุ่นเอาได้ ถ้าโชคดีแค่เบาะๆ ก็อาจหาเจออีกประมาณ
500 เมตรข้างหน้า แต่ถ้าโชคร้าย มันจะกลายเป็นหมาหลงทาง อย่าไปคิดว่ามันจะเหงานะจ๊ะ บางทีมันอาจ
เริงร่ายิ่งกว่าเดิมก็ได้ ว่าแต่ว่า สงสัยจริงๆ หมาพันธุ์นี้มันรักเราจริงรึเปล่า

9.  ในกรณีที่ คุณอยู่บ้านในซอยเปลี่ยว แถวบ้านเป็นที่รกร้าง ใกล้สุสาน ป่าช้า ฮวงซุ้ย เมื่อท่านเลือกใช้
บริการไซบีเรียน ฮัสกี้ แทนที่จะได้ความอบอุ่นใจ กลายเป็นว่าอาจจะได้ความเย็นยะเยือกสันหลังทุกคืนแทน
ด้วยน้ำเสียงลีลาหอนบาดใจ บรู๊วววววว์ บรู๋ววววฺ โบร๋วววววว์ ….. ทุกค่ำคืนยามดึก จะช่วยให้เงามืดในบ้าน
ต้นกล้วย หรือเงากระจกในห้องน้ำ ดูเคลื่อนไหวสมจริง เกินกว่าจินตนาการ บางที หน้าต่าง ใต้เตียงของคุณ
อาจมีใครสักคน กำลังมาลูบหัวเจ้าหมาป่าเล่นอยู่ก็ได้

10. แม้ว่าพ่อเจ้าประคุณจะมาจากดินแดนหนาวเย็น ใกล้ขั้วโลก ชื่นชอบน้ำเป็นชีวิตจิตใจ ด้วยลีลาการ
กระโดดเหยียบอ่างน้ำแล้ววิ่งเข้าบ้าน ขี้โคลนทั้งน้านนน แต่ขอโทษที จะอาบน้ำซักครั้งเหมือนพาเข้าโรง
เชือด ทั้งดื้นทั้งโวยวาย แถมอาบน้ำเปลืองแชมพูจิ๊บเป๋ง อาบตัวเดียว ใช้ปริมาณน้ำเกือบเท่ากับอาบเด็กๆ
ลายจุด 5 ตัว แถมเวลาเอาออกจากห้องน้ำ ห้ามเผลอปล่อยวิ่ง เพราะคุณพี่จะแอบไถลดินให้เป็นที่ปลาบ
ปลื้มคนเลี้ยงยิ่งนัก  ไม่รวมตอนหวีขนที่ต้องวิ่งไล่จับกันอีกรอบ ซึ่งจะช่วยให้คุณได้เผาผลาญส่วนเกินร่าง
กายอย่างสนุกสนาน

ส่ง Auto Notification โดยใช้ Windows Service

บริการ Microsoft Windows NT, ช่วยให้คุณสามารถสร้างโปรแกรมประยุกต์ที่ปฏิบัติการยาวทำงานที่ทำงานในช่วงของ Windows ของตัวเอง บริการเหล่านี้สามารถเริ่มต้นโดยอัตโนมัติเมื่อบูทเครื่องคอมพิวเตอร์ที่สามารถหยุดและเริ่มต้นใหม่และไม่ได้แสดงให้เห็นส่วนติดต่อผู้ใช้ใด ๆ คุณสมบัติเหล่านี้ทำให้บริการที่เหมาะสำหรับการใช้งานบนเซิร์ฟเวอร์หรือเมื่อใดก็ตามที่คุณจำเป็นต้องทำงานยาวทำงานที่ไม่ได้ยุ่งเกี่ยวกับผู้ใช้อื่นที่กำลังทำงานบนคอมพิวเตอร์เครื่องเดียวกัน

บริการ Windows ถูกสร้างขึ้นโดยใช้เครื่องมือในการพัฒนาเช่น Microsoft Visual Studio หรือ Embarcadero Delphi เพื่อที่จะให้บริการ Windows โปรแกรมจะต้องมีการเขียนในลักษณะที่จะสามารถจัดการกับการเริ่มต้นหยุดและหยุดข้อความจากตัวจัดการควบคุมบริการ บริการจัดการควบคุมเป็นส่วนประกอบของ Windows ที่เป็นผู้รับผิดชอบสำหรับการเริ่มต้นและหยุดบริการ

  • Open Visual Studio
  • Go to file->new->project
  • Select Windows service
  • Right click on Service1.cs and select properties
  • In the properties window, click on add Installerhttptheintelligenceproject.com19
  • Right click on serviceInstaller1, select properties
  • Change DisplayNameServiceName to SeraMailService
  • StartType to Automatic

theintelligenceproject20

 

  • Right click on serviceProcessInstaller1 then select Properties
  • Change Account to LocalSystem
  • Right click on Service1.cs Design select ViewCode

theintelligenceproject21

 

n the OnStart method :

public void GetMail(object sender, System.Timers.ElapsedEventArgs args)
        {
            NetworkCredential cred = new NetworkCredential("email@lafarge.com", "Password");
            MailMessage msg = new MailMessage();
            msg.To.Add("email@apsissolutions.com");
            msg.Subject = "Welcome JUBAYER";

            msg.Body = "You Have Successfully Entered to Sera's World!!!";
            msg.From = new MailAddress("email@apsissolutions.com"); // Your Email Id
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            SmtpClient client1 = new SmtpClient("smtp.mail.yahoo.com", 465);
            client.Credentials = cred;
            client.EnableSsl = true;
            client.Send(msg);
        }


Add this line before onload method:
System.Timers.Timer createOrderTimer;


In the onStart method, type this code:
createOrderTimer = new System.Timers.Timer();
createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetMail);
createOrderTimer.Interval = 180000;//Set Three minutes intervals
createOrderTimer.Enabled = true;
createOrderTimer.AutoReset = true;
createOrderTimer.Start();



The full code:

System.Timers.Timer createOrderTimer;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            createOrderTimer = new System.Timers.Timer();
            createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetMail);
            createOrderTimer.Interval = 500;
            createOrderTimer.Enabled = true;
            createOrderTimer.AutoReset = true;
            createOrderTimer.Start();           
        }

        public void GetMail(object sender, System.Timers.ElapsedEventArgs args)
        {
            NetworkCredential cred = new NetworkCredential("email@lafarge.com", "Password");
            MailMessage msg = new MailMessage();
            msg.To.Add("email@apsissolutions.com");
            msg.Subject = "Welcome JUBAYER";

            msg.Body = "You Have Successfully Entered to Sera's World!!!";
            msg.From = new MailAddress("email@apsissolutions.com"); // Your Email Id
            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            SmtpClient client1 = new SmtpClient("smtp.mail.yahoo.com", 465);
            client.Credentials = cred;
            client.EnableSsl = true;
            client.Send(msg);
        }

Send Mail Form Use C#

httptheintelligenceproject.com18

 

Code

 

<%this is the client side code for the design and display%>
<asp:Panel ID="Panel1" runat="server" DefaultButton="btnSubmit">
    <p>
        Please Fill the Following to Send Mail.</p>
    <p>
        Your name:
        <asp:RequiredFieldValidator ID="RequiredFieldValidator11" runat="server" ErrorMessage="*"
            ControlToValidate="YourName" ValidationGroup="save" /><br />
        <asp:TextBox ID="YourName" runat="server" Width="250px" /><br />
        Your email address:
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="*"
            ControlToValidate="YourEmail" ValidationGroup="save" /><br />
        <asp:TextBox ID="YourEmail" runat="server" Width="250px" />
        <asp:RegularExpressionValidator runat="server" ID="RegularExpressionValidator23"
            SetFocusOnError="true" Text="Example: username@gmail.com" ControlToValidate="YourEmail"
            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="Dynamic"
            ValidationGroup="save" /><br />
        Subject:
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="*"
            ControlToValidate="YourSubject" ValidationGroup="save" /><br />
        <asp:TextBox ID="YourSubject" runat="server" Width="400px" /><br />
        Your Question:
        <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="*"
            ControlToValidate="Comments" ValidationGroup="save" /><br />
        <asp:TextBox ID="Comments" runat="server" 
                TextMode="MultiLine" Rows="10" Width="400px" />
    </p>
    <p>
        <asp:Button ID="btnSubmit" runat="server" Text="Send" 
                    OnClick="Button1_Click" ValidationGroup="save" />
    </p>
</asp:Panel>
<p>
    <asp:Label ID="DisplayMessage" runat="server" Visible="false" />
</p>  




protected void SendMail()
{
    // Gmail Address from where you send the mail
    var fromAddress = "Gmail@gmail.com";
    // any address where the email will be sending
    var toAddress = YourEmail.Text.ToString(); 
    //Password of your gmail address
    const string fromPassword = "Password";
     // Passing the values and make a email formate to display
    string subject = YourSubject.Text.ToString();
    string body = "From: " + YourName.Text + "\n";
    body += "Email: " + YourEmail.Text + "\n";
    body += "Subject: " + YourSubject.Text + "\n";
    body += "Question: \n" + Comments.Text + "\n";
    // smtp settings
    var smtp = new System.Net.Mail.SmtpClient();
    {
        smtp.Host = "smtp.gmail.com";
        smtp.Port = 587;
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
        smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
        smtp.Timeout = 20000;
    }
    // Passing values to smtp object
    smtp.Send(fromAddress, toAddress, subject, body);
}

protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        //here on button click what will done 
        SendMail();
        DisplayMessage.Text = "Your Comments after sending the mail";
        DisplayMessage.Visible = true;
        YourSubject.Text = "";
        YourEmail.Text = "";
        YourName.Text = "";
        Comments.Text = "";
    }
    catch (Exception) { }
}

PHP MVC & .NET

article

Introduction

ส่วนใหญ่ผมทำงานกับ ASP.NET และดังนั้นจึงตกหลุมรักกับความเรียบง่ายของรูปแบบ MVC ของพวกเขา คุณเพียงแค่คลิกที่ตัวควบคุมใหม่ใช่โปรดให้สร้างมุมมองและคุณจะพบกับชิ้นส่วนของรหัสควบคุมที่ไม่สามารถจะง่ายขึ้น

แต่อินเทอร์เน็ตเป็นส่วนใหญ่สร้างจาก PHP / MySQL และเมื่อคุณกำลังสร้างเว็บไซต์สำหรับเบเกอรี่ที่มุมรวมทั้ง Zend หรือบางขนาดใหญ่อื่น ๆ MVC, อาจจะมีบิตกว่าด้านบน ฉันอยากจะสร้างคำกริยา MVC ง่ายใน PHP ที่ชั้นควบคุมอาจเป็นเพียงแค่ง่ายๆเป็น NET. ที่แตกต่างกัน

ใน. NET คุณสามารถเลือกหลายแม่แบบเครื่องยนต์ ในกิริยาที่ผมนำเสนอให้คุณได้อย่างง่ายดายสามารถ plug-in แม่แบบเครื่องยนต์ใด ๆ ที่คุณต้องการ ฉันไปสำหรับ Smarty http://www.smarty.net/

ฉันอยู่ในขณะนี้วิธีการที่อ้างว่านี้จะไม่ซ้ำกันมีจำนวนมากของกรอบที่ดีออกมีที่ทำตรงเดียวกัน เช่น CodeIgniter แต่ฉันคิดว่ามันจะสนุกกับการดูว่าคุณสามารถม้วนของคุณเอง

อันดับแรก เนื่องจากเราต้องการรุ่น MVC เราต้องขอทั้งหมดจะถูกส่งผ่านแหล่งเดียว นี้จะกระทำโดยการเปลี่ยนไฟล์ htaccess.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.css|\.js|\.jpg|\.jpeg|\.png|\.gif|\.flv|\.swf)$
RewriteRule ^.*$ index.php

Bootstrapping

[settings]
controller_path="controllers/"
view_path="views/"
baseURL="/subdir"

baseUrl อาจจะว่างเปล่า ถ้าได้รับการติดตั้งที่ root ของเว็บไซต์

index.php เป็นแล้วจะไปรวมถึง Smarty และทำบางสิ่งพื้นฐาน แล้วทำส่วนที่สำคัญที่สุดของการแยกวิเคราะห์ URL ที่ร้องขอเข้ามา

หาก URL เป็น home แล้ว homeController.php ควรมีการควบคุมที่ ดังนั้นหาก URL ที่เป็น products/details/10, productsController.php ควรจะโหลด

<?php

require_once('libs/Smarty.class.php');    

$config = parse_ini_file("config.ini", TRUE); 

if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD'])) {
    //This will hold the request data. If there is any.
    $requestData = '';
    //The method
    $method = $_SERVER['REQUEST_METHOD'];

    if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] > 0) {
        //There is some data in the request. We would like to have this.
        $httpContent = fopen('php://input', 'r');
        while ($data = fread($httpContent, 1024)) {
            $requestData .= $data;
        }
        fclose($httpContent);
    }    

    //If we are installed in a subdirectory, we'd like to analyse the part after this directory
    $urlString = substr($_SERVER['REQUEST_URI'], strlen($config['settings']['baseURL']));
    //Split the url in pieces
    $urlParts = explode('/', $urlString); 

    if (isset($urlParts[0]) && $urlParts[0] == '') {
    	array_shift($urlParts);
    }

    if (!isset($urlParts[0]) || $urlParts[0] == '') {
        //If the url does not contain more then / we're going to start the default controller. Which is home
        $mainViewPath="home/";
        $currentController = "HomeController";
        $controllerFile = "homeController.php";	    		
    	}
    else	{
        //There is a directive after the / so that is going to be our controller
        $mainViewPath=strtolower($urlParts[0]);
        $currentController = ucfirst($urlParts[0]) . "Controller";
        $controllerFile = $urlParts[0] . "Controller.php";	    			
        //This will make the 'action' part of the url the first directive
        array_shift($urlParts);
    	}    

}
else    {
    header($_SERVER["SERVER_PROTOCOL"] . " 400 Bad request");      
}
?>

Abstract class Controller

ตอนนี้เรา รู้ว่าที่ ชั้นควบคุม เรา อยากจะเริ่มต้น ถ้ามีคน ให้เราขอ URL / ผลิตภัณฑ์ที่ เรา ต้องการ ที่จะโหลด productsContoller.php และ สร้างตัวอย่างของ ProductsController

แต่ก่อนอื่น เราจำเป็นต้อง มุ่งเน้นไปที่ การสร้างตัวควบคุม ระดับนามธรรม เพื่อให้ได้รับ การควบคุม ของเรา ได้เช่นโครงสร้างง่าย ที่เรา จะต้องมี ชั้นยอด ที่จะทำ อัลยกของหนัก

ตัวควบคุม ทั้งหมด จะได้รับมรดก จาก ชั้นนี้ ชั้น ควบคุมความต้องการ ที่จะทำ บางสิ่ง จะต้องมีการ มองไปที่ สิ่งที่เหลืออยู่ ของ URL คำขอและ ตรวจสอบว่า การดำเนินการ ควบคุม ภายในควรจะเริ่มต้น ดังนั้น ถ้าเราได้รับ / ผลิตภัณฑ์ที่ มี การดำเนินการ ที่กำหนดไว้ ไม่ได้และ เราจะเริ่มต้น การกระทำ ดัชนี ถ้าเราได้รับ / products / รายละเอียด ที่เรา wil เริ่มต้น การดำเนินการ รายละเอียด

สิ่งที่สองที่ ชั้น ควบคุม ความต้องการที่จะ ทำคือการสร้าง viewBag นี่คือ ‘ กระเป๋า ‘ ของข้อมูลที่สามารถ ควบคุม การดำเนินการ เพิ่มข้อมูลไปยัง แต่ ถัดไปที่ ผมชอบที่จะ ถือว่า ข้อมูล ยัง โพสต์ ที่เป็น JSON และ ว่าข้อมูลที่ โพสต์ ทั้งหมด จะถูกเพิ่ม viewBagก่อนที่จะเริ่ม การดำเนินการ ควบคุม นี้จะช่วยให้ การตั้งค่า ตัวแปร แม่แบบ จาก JavaScript ( แต่ ที่อาจจะ ดีกว่าสำหรับครั้งต่อไป )

สิ่งที่สาม ที่เขาทำ คือการ ตรวจสอบ ไฟล์ view.html

 

public function __construct($controllerName, $urlParts, $data)
{
    $this->fullActionPath=implode("/", $urlParts);

    $this->method=$_SERVER['REQUEST_METHOD'];

    //We are assuming the data to be a JSON string. In a final version this should have some error handling
    if($data=='')   {
        $data='{}';
    }
    $this->viewBag=json_decode($data);

    //The action is the first part	
    $action=$urlParts[0];

    if (count($urlParts) > 1 && $urlParts[1] != '') {
        //Now we need to find the identifiers
        array_shift($urlParts);
        foreach ($urlParts as $uid) {
            if ($uid != '') {
                $this->uid[] = $uid;
            }
        }
    }			
    if(!isset($action) || $action=='')	{
        //If there is no action, we'll start the default action.
        $action="index";
    }

    //The view html
    $this->viewHtml=strtolower($action) . ".html";

    try	{
        //call_user_func gives a fatal error, which we cannot catch.
        //So we cannot handle asking for a unknown action
        //This is why we'll use the ReflectionClass's getMethod which will throw an exception
        $reflector = new ReflectionClass($this);
        $method=$reflector->getMethod($action);
        //If all works. We'll start the action.
        call_user_func($controllerName . "::" . $action, $this->uid);
    }
    catch(Exception $exc)	{
        //If the view doesn't exists, we'll start the default view.
        //In a final version this should start the ViewUnknown action.
        call_user_func($controllerName . "::index");
    }
}

View function

 Collapse | Copy Code
//@method View 
//@description Combines the view with the viewBag data. 
public function View()
{
    //Detertime the full path to the view file
    $viewPath=$GLOBALS['config']['settings']['view_path'] . $this->viewHtml;

    if	(file_exists($viewPath))	{
        //If the file exists use the smart engine
        //This would be the place to use some other engine like Mustache
        $this->smarty = new Smarty();

        foreach($this->viewBag as $key => $value) {
        	$this->smarty->assign($key, $value);
        }

        $this->smarty->display($viewPath);
    }
    else	{
        header('HTTP/1.0 404 Not Found');
        echo "404 Not Found";
        echo "The page that you have requested could not be found.";					
    }
}

HomeController

 Collapse | Copy Code
<?php
/*
    @class HomeControlelr
    @extends Controller
    @description Dit is de controller for home
*/
class HomeController extends Controller
{

    //@method index De index action
    public function index()	
    {
        //Lets set some variable to test the template
        $this->viewBag->hellomessage="Hello world!";
        return $this->View();
    }
}
?>

home/index.html

 Collapse | Copy Code
<html>
<head>
    <title>Index</title>
</head>
<body>
    <h1>{$hellomessage}</h1>
</body>
</html>

C# Multi Language

วันนี้มาเขียน C# Multi Language กันครับ

1. เริ่มจากสร้าง new website project

2. สร้าง folder  App_GlobalResources  ดูได้จากรูปครับ

httptheintelligenceproject.com16

 

3. คลิกขวา App_GlobalRrsources เลือก Resources File ใหม่ เพื่อเพิ่มภาษา และเราสามารถเพิ่มไฟล์ภาษาเขียนตามฟอแมทนี้ครับ “name.language-culture.resx”

4. เปิด resource files  มาเพื่อใส่ค่า ตามรูป

httptheintelligenceproject.com17

 

5. สร้าง  class file  ร่วมกับ  BasePage เช่น

Original: public partial class Default : System.Web.UI.Page

Now: public partial class Default : BasePage

6. สร้าง webpage  Default.aspx โดย codeข้างใน inheritance  มาจาก System.Web.UI.Page to BasePage.

7. ใช้ asp:Literal control  ตัวอย่าง code

<asp:Literal ID="Literal3" runat="server" Text="<%$Resources:chienvh.language,mnuHome%>"/>



using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Globalization;
using System;

namespace ASPNetMultiLanguage
{
    public class BasePage : System.Web.UI.Page
    {
        protected override void InitializeCulture()
        {
            if (!string.IsNullOrEmpty(Request["lang"]))
            {

			Session["lang"] = Request["lang"];
            }
            string lang = Convert.ToString(Session["lang"]);
            string culture = string.Empty;
            /* // In case, if you want to set vietnamese as default language, then removing this comment
            if(lang.ToLower().CompareTo("vi") == 0 ||string.IsNullOrEmpty(culture))
            {               
				culture = "vi-VN";
            }
             */
            if (lang.ToLower().CompareTo("en") == 0 || string.IsNullOrEmpty(culture))
            {
                culture = "en-US";
            }
            if (lang.ToLower().CompareTo("vi") == 0)
            {               
				culture = "vi-VN";
            }
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

            base.InitializeCulture();
        }
    }
}







using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ASPNetMultiLanguage
{
    public partial class Default : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            #region--Show/hide language link
            if (!string.IsNullOrEmpty(Convert.ToString(Session["lang"])))
            {
                if (Convert.ToString(Session["lang"]) == "en")
                {
                    linkVietnameseLang.Visible = true;
                    linkEnglishLang.Visible = false;
                }
                else
                {
                    linkEnglishLang.Visible = true;
                    linkVietnameseLang.Visible = false;
                }
            }
            else
            {
                linkVietnameseLang.Visible = false;
                linkEnglishLang.Visible = true;
            }
            #endregion--
        }
    }
}