۱۳۸۹/۱۰/۳۰

اضافه کردن یک باکس جستجو به منو در WordPress

برای اینکار در ورد پرس 3 به بعد باید کدهای زیر را در فایل functions.php که در پوشه تم موجود است قرار دهید اگر این فایل را ندارید با استفاده از یک ویرایشگر متن ساده آن را ایجاد کنید.

add_filter('wp_nav_menu_items','add_search_box', 10, 2);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= '
  • ' . $searchform . '
  • '; return $items; }

    به همین سادگی!!!
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۲۲

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 6

    ایجاد یک کنسل کننده ترکیبی برای چندین Task

    می‌توانید با استفاده از چند CancellationToken یک Token ترکیبی ایجاد نمود در این حالت با کنسل شدن هر کدام از Token های زیر مجموعه خود Token اصلی کنسل خواهد شد.این امر با قرار دادن Token ها در متد CreateLinkedTokenSource از کلاس CancellationTokenSource محقق می‌شود مثال :

    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_11 {
    
    class Listing_11 {
    
    static void Main(string[] args) {
    
    // create the cancellation token sources
    
    CancellationTokenSource tokenSource1 = new CancellationTokenSource();
    
    CancellationTokenSource tokenSource2 = new CancellationTokenSource();
    
    CancellationTokenSource tokenSource3 = new CancellationTokenSource();
    
    // create a composite token source using multiple tokens
    
    CancellationTokenSource compositeSource =
    
    CancellationTokenSource.CreateLinkedTokenSource(
    
    tokenSource1.Token, tokenSource2.Token, tokenSource3.Token);
    
    // create a cancellable task using the composite token
    
    Task task = new Task(() => {
    
    // wait until the token has been cancelled
    
    compositeSource.Token.WaitHandle.WaitOne();
    
    // throw a cancellation exception
    
    throw new OperationCanceledException(compositeSource.Token);
    
    }, compositeSource.Token);
    
    // start the task
    
    task.Start();
    
    // cancel one of the original tokens
    
    tokenSource2.Cancel();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    }
    

    چگونه می‌توان تعیین کرد یک Task کنسل شده است؟

    با استفاده از خصوصیت IsCancelled از کلاس Task می‌توان تعیین نمود که یک Task کنسل شده است یا خیر.

    اگر true باشد یعنی فرایند کنسل شدن بدرستی انجام شده است در غیر این صورت Task کنسل نشده است.مثال :

    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_12 {
    
    class Listing_12 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource1 = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token1 = tokenSource1.Token;
    
    // create the first task, which we will let run fully
    
    Task task1 = new Task(() => {
    
    for (int i = 0; i < 10; i++) {
    
    token1.ThrowIfCancellationRequested();
    
    Console.WriteLine("Task 1 - Int value {0}", i);
    
    }
    
    }, token1);
    
    // create the second cancellation token source
    
    CancellationTokenSource tokenSource2 = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token2 = tokenSource2.Token;
    // create the second task, which we will cancel
    
    Task task2 = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    token2.ThrowIfCancellationRequested();
    
    Console.WriteLine("Task 2 - Int value {0}", i);
    
    }
    
    }, token2);
    
    // start all of the tasks
    
    task1.Start();
    
    task2.Start();
    
    // cancel the second token source
    
    tokenSource2.Cancel();
    
    // write out the cancellation detail of each task
    
    Console.WriteLine("Task 1 cancelled? {0}", task1.IsCanceled);
    
    Console.WriteLine("Task 2 cancelled? {0}", task2.IsCanceled);
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    در مثال فوق دو Task ایجاد شده است. هر دو Task از دو CancellationToken مختلف که دو CancellationTokenSource متفاوت دارند استفاده می نمایند. CancellationTokenSource برای Task دوم کنسل می‌شود اما Task اول اجازه دارد که وظیفه‌اش را بطور کامل انجام دهد. خروجی برنامه چنین خواهد بود :
    Task 1 cancelled? False Task 2 cancelled? True Task 1 - Int value 0 … Task 1 - Int value 9 Main method complete. Press enter to finish.
    انتظار برای گذشت زمان
    هنگام کاربا Task ها در برخی از موارد لازم است برای مدت زمانی خاص برنامه درنگ کند.مثلا در هنگام اجرای یک Task لازم است برنامه مقداری را بدست آورد و ادامه برنامه با توجه به مقدار بدست آمده اجرا شود برای این کار لازم است Task برای مدت زمانی خاص صبر کند یا اصطلاحاً بخواب رود.بعد از سپری شدن مدت زمان مورد نظر Task از خواب بیدار شده و کارش را ادامه خواهد داد.در ادامه روشهای خواب کردن Task ها را مورد بررسی قرار خواهیم داد.
    استفاده از هندل انتظار Cancellation Token
    این روش بهترین راه برای خواب کردن یک Task می باشد.همانطور که قبلاً دیدیم برای اینکه یک Task را کنسل کنیم ابتدا نمونه‌ای از کلاس CancellationTokenSource را تعریف می‌کنیم سپس با کمک خصوصیت Token آن شی CancellationToken را مقدار دهی می‌کنیم در آخر کار با استفاده از متد خصوصیت WaitHandle و متد WaitOne می‌توان Task را کنسل نمود. اما متد WaitOne می‌تواند پارامتری را به عنوان زمان داشته باشد که Task را برای مدت زمانی خاص بر حسب میلی ثانیه قبل از کنسل شدن بخواب ببرد. مثال زیر موضوع را شفاف می‌کند :
    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_13 {
    
    class Listing_13 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token = tokenSource.Token;
    
    // create the first task, which we will let run fully
    
    Task task1 = new Task(() => {
    
    for (int i = 0; i < Int32.MaxValue; i++) {
    // put the task to sleep for 10 seconds
    
    bool cancelled = token.WaitHandle.WaitOne(10000);
    
    // print out a message
    
    Console.WriteLine("Task 1 - Int value {0}. Cancelled? {1}",i, cancelled);
    
    // check to see if we have been cancelled
    
    if (cancelled) {
    
    throw new OperationCanceledException(token);
    
    }
    
    }
    
    }, token);
    
    // start task
    
    task1.Start();
    
    // wait for input before exiting
    
    Console.WriteLine("Press enter to cancel token.");
    
    Console.ReadLine();
    
    // cancel the token
    
    tokenSource.Cancel();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    در کد بالا یک Task ایجاد شده که یک پیغام را به خروجی می‌فرستد سپس با استفاده از متد WaitOne به مدت 10 ثانیه بخواب می‌رود .برنامه تا زمان دریافت کلید Enter از کاربر پیغام ها به خروجی می فرستد. و در صورت کنسل شدن Task پایان می‌یابد البته زمانی کنسل شدن صورت می‌گیرد که زمان 10 ثانیه سپری شده باشد.
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۲۱

    شمارش تعداد لینکهای موجود در قسمت blogroll

    نیاز داشتم تا در سایتی تعداد لینکهای موجود در blogroll شمارش کرده و به کاربر نشان دهم
    یک شی بنامwpfb$ و مقداری کد sql مشکل رو حل کرد.

    کد زیر :
    <?php
    $numlinks = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'");
    if (0 < $numlinks) $numlinks = number_format($numlinks);
    echo $numlinks;
    ?>
    
    
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    تغییر ویرایشگر پیش فرض در WordPress

    در دشبورد ورد پرس بطور پیش فرض از ادیتور Visual Editor استفاده می شود.
    برای اینکه از ادیتور دیگری مثلا HTML editor استفاده شود باید کد زیر را در در فایل functions.php قرار دهیم.

    add_filter('wp_default_editor', create_function('', 'return "html";'));
    

    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۲۰

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 5

    مونیتور کردن فرایند کنسل شدن با کمک Delegate

    براحتی می‌توانید یک Delegate را با یک CancellationToken ثبت کنید و در هنگامی که متد Cancel صدا زده می‌شود از آن استفاده نمود .این روش در برنامه‌هایی که دارای رابط کاربری هستند مثل برنامه‌های WinForm یاWPF مفید است . اگردر Task مورد نظر پروسه غیر همزمان دیگری مثل خواندن و نوشتن روی دیسک انجام می‌شود این روش بسیار مفید است و Delegate ترید اصلی برنامه را براحتی از دریافت درخواست کنسل شدن Task آگاه می کند. مثال :
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_08 {
    
    class Listing_08 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token = tokenSource.Token;
    
    // create the task
    
    Task task = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    if (token.IsCancellationRequested) {
    
    Console.WriteLine("Task cancel detected");
    
    throw new OperationCanceledException(token);
    
    } 
    else
     {
    
    Console.WriteLine("Int value {0}", i);
    
    }
    
    }
    
    }, token);
    
    // register a cancellation delegate
    
    token.Register(() => {
    
    Console.WriteLine(">>>>>> Delegate Invoked\n");
    
    });
    
    // wait for input before we start the task
    
    Console.WriteLine("Press enter to start task");
    
    Console.WriteLine("Press enter again to cancel task");
    
    Console.ReadLine();
    
    // start the task
    
    task.Start();
    
    // read a line from the console.
    
    Console.ReadLine();
    
    // cancel the task
    
    Console.WriteLine("Cancelling task");
    
    tokenSource.Cancel();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    

    تنها تفاوت دو مثال قبلی دراستفاده از متد Register از کلاس CancellationToken می باشد. متد Register یک نمونه از کلاس Action را دریافت کرده و در هنگام کنسل کردن Task نمونه کلاس Action را اجرا می کند.

    مونیتور کردن فرایند کنسل شدن با استفاده از هندل انتظار یا Wait Handle


    در این روش از متد WaitOne ازخصوصیت WaitHandle کلاس CancellationToken استفاده می‌شود . در مثال زیر دو Task وجود دارد Task دوم متد WaitOne را از token که در Task اول استفاده می‌شود را صدا می‌زند این امر موجب بلاک شدن ترید تا زمان مشخص شدن تکلیف کنسل شدن Task اول می‌شود :

    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_09 {
    
    class Listing_09 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token = tokenSource.Token;
    
    // create the task
    
    Task task1 = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    if (token.IsCancellationRequested) {
    
    Console.WriteLine("Task cancel detected");
    
    throw new OperationCanceledException(token);
    
    }
     else 
    {
    
    Console.WriteLine("Int value {0}", i);
    
    }
    
    }
    
    }, token);
    
    // create a second task that will use the wait handle
    
    Task task2 = new Task(() => {
    
    // wait on the handle
    
    token.WaitHandle.WaitOne();
    
    // write out a message
    
    Console.WriteLine(">>>>> Wait handle released");
    
    });
    
    // wait for input before we start the task
    
    Console.WriteLine("Press enter to start task");
    
    Console.WriteLine("Press enter again to cancel task");
    
    Console.ReadLine();
    
    // start the tasks
    
    task1.Start();
    
    task2.Start();
    
    // read a line from the console.
    
    Console.ReadLine();
    
    // cancel the task
    
    Console.WriteLine("Cancelling task");
    
    tokenSource.Cancel();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    }
    
    }
    
    }
    

    کنسل کردن چندین Task بطور همزمان
    با تعریف یک نمونه از کلاس CancellationToken و استفاده از آن در هنگام ایجاد چند Task براحتی می‌توانید با یک بار صدا کردن متد Cancel تمام Task ها را با هم کنسل نمود . مثال :
    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    
    namespace Listing_10 {
    
    class Listing_10 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token = tokenSource.Token;
    
    // create the tasks
    
    Task task1 = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    token.ThrowIfCancellationRequested();
    
    Console.WriteLine("Task 1 - Int value {0}", i);
    
    }
    
    }, token);
    
    Task task2 = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    token.ThrowIfCancellationRequested();
    
    Console.WriteLine("Task 2 - Int value {0}", i);
    }
    
    }, token);
    
    // wait for input before we start the tasks
    
    Console.WriteLine("Press enter to start tasks");
    
    Console.WriteLine("Press enter again to cancel tasks");
    
    Console.ReadLine();
    
    // start the tasks
    
    task1.Start();
    
    task2.Start();
    
    // read a line from the console.
    
    Console.ReadLine();
    
    // cancel the task
    
    Console.WriteLine("Cancelling tasks");
    
    tokenSource.Cancel();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۱۸

    آموزش jquery - قسمت اول

    دوستی دارم خیلی علاقه داره با jquery کار کنه اما خب ندانستن زبان انگلیسی و همچنین نبود یک مرجع خوب فارسی باعث شده که دچار مشکل بشه.

    سعی می کنم که با زبان خیلی ساده قابلیتها و مشخصات این کتابخانه قدرتمند توسعه وب رو شرح بدم.

    مقدمه
    jquery یک کتابخانه بسیار قدرتمند جاوا اسکریپت است که با کمک آن می توان روی html خروجی در مرورگر تغییرات مورد نظر را اعمال کرد.برای کار باjquery آشنایی کامل با htmlو javascript ضروری است.

    jquery برای کار با عناصر روی یک صفحه وب نیازمند است که از لود شدن همه عناصر اطمینان حاصل کند برای این کار از تابع زیر استفاده می کند :

    $(document).ready(function() {
        console.log('ready!');
    });
    
    کد بالا با خطوط زیر معادل است :

    $(function() {
        console.log('ready!');
    });
    

    همچنین می توان بعنوان پارامتر نام یک تابع رو به
    $(document).ready()
    پاس نمود مثال :
    function readyFn() {
        // code to run when the document is ready
    }
    $(document).ready(readyFn);
    

    انتخاب عناصر صفحه با کمک jquery

    انتخاب عناصر یک صفحه وب با هدف اعمال تغییر روی آنها صورت می گیرد.
    با چندین روش می توان عناصر را انتخاب نمود.

    - انتخاب با کمک ID مثال :

    $('#myId'); // note IDs must be unique per page
    

    - انتخاب با کمک نام کلاس . مثال :
    $('div.myClass'); // performance improves if you specify element type
    

    - انتخاب با کمک صفت یک عنصر. این روش ممکن است کند باشد . مثال:

    $('input[name=first_name]'); // beware, this can be very slow
    

    - انتخاب با کمک ترکیب کردن انتخابگرهای CSS مثال :

    $('#contents ul.people li');
    

    - انتخاب با کمک شبه انتخابگرها . مثال :

    $('a.external:first'); 
    $('tr:odd');
    $('#myForm :input');   // select all input-like elements in a form
    $('div:visible');
    $('div:gt(2)');        // all except the first three divs
    $('div:animated');     // all currently animated divs
    
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 4


    کنسل کردن Taskها

    کی از مباحث جدید در Task Programming Library بحث کنسل کردن Task ها می باشد. البته با روشهای معمول برنامه نویسی ترید ها نیز می‌توان امر را محقق نمود اما خب در دات نت 4 برای کاهش ریسک خطاهای نا خواسته تدابیر بخصوصی اندیشیده شده است. در ادامه خواهید دید چگونه می‌توان یک Task را کنسل کرد یا حتی آن را بخواب برد.

    ایجاد یک Task که آن را بتوان براحتی کنسل کرد دارای چهار مرحله است :

    مرحله اول - یک نمونه از کلاس System.Threading.CancellationTokenSource را ایجاد کنید:

    CancellationTokenSource tokenSource = new CancellationTokenSource;
    
    
    

    مرحله دوم - یک نمونه از کلاس CancellationToken را ایجاد کرده و آن را با استفاده از خصوصیت Token نمونه کلاسی که در مرحله قبلی ایجاد کردیم مقدار دهی می کنیم:

    CancellationToken token = tokenSource.Token;
    
    

    مرحله سوم – یک نمونه از Task را که دارای نوع خروجی باشد را ایجاد می‌کنیم این Task باید از متغیر token که در مرحله قبلی ایجاد کردیم و یک delegate Action بعنوان بدنه استفاده کند:

    Task task1 = new Task(new Action(myMethod), token);
    
    مرحله چهارم – متد Start از Task ایجاد شده در مرحله قبل را صدا کنید.

    خب الان چطور این Task را کنسل کنیم؟

    براحتی می‌توان متد Cancel از شی tokenSource را صدا کرد و Task را کنسل نمود.

    دات نت یک Task را مجبور به کنسل شدن نمیکند . خود برنامه باید CancellationTokenSource را زیر نظر بگیرد و زمانی که درخواست کنسل شدن Task رسیدبا کمک آن Task را کنسل کند. به این پروسه اصطلاحاًیک فرایند Cooperative گویند.

    پس برای کنسل کردن مونیتور کردن یک Task بسیار مهم است. در ادامه به انواع روشهای مونیتور کردن Task ها می پردازیم.

    مونیتور کردن فرایند کنسل شدن بروش نظر سنجی یا Polling


    در بدنه بعضی از Taskها حلقه هایی برای پردازش اطلاعات وجود دارد . در این حلقه ها می‌توان با بررسی مقدار true خصوصیت IsCancellationRequested که در کلاس CancellationToken وجود دارد از حلقه خارج شد و منابع Task مثل اتصالات به دیتابیس و غیره را آزاد نمود . البته باید یک نمونه از System.Threading.OperationCanceledException کلاس استثناء را هم ایجاد نمود. اگر این نمونه از کلاس استثناء ایجاد نشود وضعیت Task نامشخص خواهد ماند. مثال :

    while (true) {
    
    if (token.IsCancellationRequested) {
    
    // tidy up and release resources
    
    throw new OperationCanceledException(token);
    
    } else {
    
    // do a unit of work
    
    }
    
    }
    

    اگر هیچ منبعی در Task مورداستفاده قرار نگرفته است براحتی می‌توانید با استفاده از متد ThrowIfCancellationRequested کد بالا را ساده نمود:

    while (true) {
    
    token.ThrowIfCancellationRequested();
    
    // do a unit of work
    
    }
    
    }
    

    اکنون به یک مثال کاملتر می‌پردازیم :

    using System;
    
    using System.Threading;
    
    using System.Threading.Tasks;
    namespace Listing_07 {
    
    class Listing_07 {
    
    static void Main(string[] args) {
    
    // create the cancellation token source
    
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    
    // create the cancellation token
    
    CancellationToken token = tokenSource.Token;
    
    // create the task
    
    Task task = new Task(() => {
    
    for (int i = 0; i < int.MaxValue; i++) {
    
    if (token.IsCancellationRequested) {
    
    Console.WriteLine("Task cancel detected");
    
    throw new OperationCanceledException(token);
    
    } 
    else 
    {
    
    Console.WriteLine("Int value {0}", i);
    
    }
    
    }
    
    }, token);
    
    // wait for input before we start the task
    
    Console.WriteLine("Press enter to start task");
    
    Console.WriteLine("Press enter again to cancel task");
    
    Console.ReadLine();
    
    // start the task
    
    task.Start();
    
    // read a line from the console.
    
    Console.ReadLine();
    // cancel the task
    
    Console.WriteLine("Cancelling task");
    
    tokenSource.Cancel();
    
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    معرفی DHTMLX Touch

    یک فریک ورک قدرتمند جاوا اسکریپت برای برنامه نویسی سیستمهای موبایل است که علاوه بر داشتن کنترلهای جالب برای برنامه نویسی دارای کتابخانه ای بسیار گسترده است که شما را قادر می سازد تا برنامه هایی بنویسید که چشم هر مشتری مشکل پسندی را خیره کند.

    برنامه های نوشته شده با DHTMLX Touch روی اکثر مرورگرها براحتی اجرا می شود و Iphone و IPad و موبایلهای آندروئیدی را براحتی پشتیبانی می کند.

    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    معرفی سیستم مدیریت محتوی Locomotive

    بنده علاقه خاصی به تست قابلیتهای سیستمهای مدیریت محتوای سورس باز دارم این یکی با زبان Ruby نوشته شده :

    Locomotive
    یک سیستم مدیریت محتوی قدرتمندو بسیار قابل انعطاف است که بر اساس Rail نوشته شده است.
    بانک اطلاعاتی آن MongoDB است و بر اساس فایلهای تمپلیت کار می کند.با کمک آن براحتی می توانید چندین سایت را مدیریت کنید.ظاهر زیبای آن محاسنش را تکمیل کرده است.


    لینک سایت
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 3

    دریافت نتیجه از یک Task

    برای دریافت نتیجه از فرایند در حال انجام در قالب یک Task کافی است یک نمونه از کلاس زیر ساخته شود :

    Task<T>
    
    
    
    T در اینجا نوع متغیری است که از درون Task بازگردانده می شود.برای خواندن مقدار خروجی باید خصوصیت Result از کلاس Task را مورد استفاده قرار دهیم.

    مثال :

    using System;
    
    using System.Threading.Tasks;
    
    namespace Listing_05 {
    
    class Listing_05 {
    
    static void Main(string[] args) {
    
    // create the task
    
    Task<int> task1 = new Task<int>(() => {
    
    int sum = 0;
    
    for (int i = 0; i < 100; i++) {
    
    sum += i;
    
    }
    
    return sum;
    
    });
    // start the task
    
    task1.Start();
    
    // write out the result
    
    Console.WriteLine("Result 1: {0}", task1.Result);
    
    // create the task using state
    
    Task<int> task2 = new Task<int>(obj => {
    
    int sum = 0;
    
    int max = (int)obj;
    
    for (int i = 0; i < max; i++) {
    
    sum += i;
    
    }
    
    return sum;
    
    }, 100);
    
    // start the task
    
    task2.Start();
    
    // write out the result
    
    Console.WriteLine("Result 2: {0}", task2.Result);
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    
    

    البته خواندن نتیجه Task تا زمان پایان یافتن آن طول خواهد کشید یعبارت دیگر در مثال فوق تا زمانی که Task اول پایان نیابد Task دوم آغاز نخواهد شد چون ما قبل از صدا کردن Task دوم از Task اول تقاضای نتیجه کرده ایم.

    روش دیگر برای ایجاد Task های دارای نتیجه استفاده از متد استاتیک Task.Factory.StartNew می باشد.مثال:

    using System;
    
    using System.Threading.Tasks;
    
    namespace Listing_06 {
    
    class Listing_06 {
    
    static void Main(string[] args) {
    
    // create the task
    
    Task<int> task1 = Task.Factory.StartNew<int>(() => {
    
    int sum = 0;
    
    for (int i = 0; i < 100; i++) {
    
    sum += i;
    
    }
    
    return sum;
    
    });
    
    // write out the result
    
    Console.WriteLine("Result 1: {0}", task1.Result);
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    

    چند تنظیم برای ایجاد Task ها :

    با استفاده از گزینه هایTaskCreationOptions می‌توان در هنگام ایجاد یک Task تنظیمات مفیدی را به آن اعمال نمود.

    None : تنظیمات پیش‌فرض را به Task ایجاد شده اعمال می کند.

    LongRunning : تعیین می‌کند که Task زمان اجرای طولانی دارد.
    AttachedToParent : تعیین می‌کند که این یک Task فرزند است که به یک Task والد وابستگی دارد.


    خصوصیت Task.CurrentId یک عدد منحصربفرد صحیح است که Task فعلی را مشخص می کند. این خصوصیت در خارج از بدنه Task نال می باشد.
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    معرفی سیستم پورتال Liferay


    Liferay چیست؟

    یک سیستم پورتال سورس باز مبتنی بر جاوا است که برای ایجاد پورتالهای سازمانی در سطج حرفه‌ای بسیار مناسب است.
    اگر قصد راه اندازی یک مجموعه سایت برای یک سازمان بزرگ را دارید و نیازمند یک سیستم مدیریت محتوا با توانایی کنترل کامل دسترسی کاربران هستید Liferay گزینه مناسبی است.

    لیست فابلیتهای سیستم Liferay :

    سیستم مدیریت کاربران : این سیستم در Liferay بسیار فدرتمند است براحتی می‌توانید:

    - یک کاربر جدید ایجاد کنید.
    - اطلاعات بک کاربر قدیمی را ویرایش کنید.
    - برای کاربران گروه و رل تعریف کنید. با کمک گروه و رل می‌توانید سطح دسترسی کاربران را بر قسمتهای مختلف سایت و فایلهای مختلف مدیریت کنید. مثلاً یک صفحه فقط برای مدیران سایت قابل مشاهده است و یا فقط گروه خاصی از کاربران بتوانند در سایت امکان ارسال مطلب داشته باشند.

    سیستم ایجاد و مدیریت انجمن گفتگو : در یک انجمن گفتگو می‌توان امکان بحث و گفتگو را درباره موضوعات مختلف را برای کاربران فراهم نمود.
    این انجمن را می‌توان به بخشهای مختلف تقسیم نمود و به هر بخش سطح دسترسی های متفاوتی را اعمال نمودوبرای هر بخش کاربران و مدیرانی را تعریف نمود.در هر انجمن براحتی می‌توان کاربران را مدیریت کرد و حتی می‌توان دسترسی یک کاربر را به یک انجمن گفتگو بطور کامل قطع نمود که به این کار به اصطلاح بن کردن می گویند. مطالبی را که توسط کاربران در انجمن پست می‌شود را می‌توان با کمک تگ هایی که برای هر پست تعریف می‌شود براحتی جستجو کرد.

    سیستم ویکی Wiki : ویکی یک مرجع اطلاعات درباره یک موضوع خاص می‌باشد . فرض کنید در یک سازمان نیاز دارید که پرسنل اطلاعات خود را در مورد یک موضوع فنی با هم به اشتراک بگذارند. با کمک ویکی این امر میسر می‌شود . در یک ویکی هر کاربری که اجازه داشته باشد براحتی می‌تواند صفحات که حاوی اطلاعات فنی باشد را ایجاد نمود و آنرا برا سایر کاربران به اشتراک گذاشت. برای هر مطلبی می‌توان توضیحاتی را قرار داد.

    سیستم نظر سنجی : در Liferay یک سیستم قدرتمند برای ایجاد نظرسنجی های مختلف در سایتهای درون سازمانی و پورتالها موجود است که براحتی با سیستم مدیریت کاربران تلفیق می گردد.

    سیستم جمع آوری اطلاعات : یکی از قابلیتهای جالب در Liferay توانایی استفاده از فرمهای وب برای جمع آوری اطلاعات درباره موضوعات مختلف است. هر فرم وب در هنگامی که توسز مدیریت سایت تعریف می‌شود و روی وب سایت قرار می‌گیرد می‌تواند اطلاعات مورد نظر را به صورت کاملاً ساختار یافته از کاربران سایت جمع آوری کند.هر فرم دارای دو حالت ویرایش و نمایش است . حالت نمایش مخصوص کاربران عادی و حالت ویرایش مخصوص مدیران سایت است.


    سیستم وبلاگ داخلی :
    Liferay دارای یک سیستم وبلاگ داخلی است که این امکان را فراهم می‌کند که به هر کاربر یک وبلاگ اختصاص داد و کاربر می‌تواند درون وبلاگش بخشهای مختلفی ایجاد کند و مطالب مورد نظرش را درآن پست نماید. کاربران می‌توانند در وبلاگهای یکدیگر نطر بدهتد.کلیه اطلاعا ت و پستهای یک وبلاگ دارای قابلیت جستجو است . همچنین می‌توان به هر پست قابلیت ارزش دهی داد تا سایر کاربران بتوانند میزان مفید بودن آن پست را مشخص کنند.
    نکته دیگر در مورد وبلاگها ایجاد خروجی RSS ازپستهای هر وبلاگ است با کمک این قابلیت می‌توان براحتی بدون آنکه به وبلاگ سر بزنیم از تغییرات آن آگاه شویم.

    سیستم تقویم مشترک : یک سیستم تقویم مشترک در داخل یک سازمان بسیار مفید است . براحتی می‌توان رویدادهای مختلف را درون تفیویم تعریف نمود و با سایر کاربران به اشتراک گذاشت.

    سیستم گردش کار یا WorkFlow : یک قابلیت بسیار مفید در بخش مدیریت Liferay امکان تعریف گردش کار است. با کمک گردش کار براحتی می‌توان برای سازمان یا شرکت یک سیستم مدیریت پرونده یا یک دبیرخانه الکترونیک ایجاد نمود.

    سیستم مدیریت محتوا و انتشار اسناد : این سیستم یکی از برجسته‌ترین قابلیتهای Liferay است که دارای امکانات زیر می باشد:

    تعریف پوشه و زیر پوشه برای اسناد و تصاویر.
    امکان اضافه کردن نامحدود اسناد و تصاویر.
    امکان مدیریت کامل دسترسی ها به اسناد و تصاویر.
    امکان جستجو بر روی اسناد و تصاویر
    امکان انتشار اسناد و تصاویر بصورت بولتن و ژورنال.
    امکان تعریف الگو برای نحوه نمایش اسناد و تصاویر انتشار یافته.
    امکان مدیریت کامل بر نحوه دسترسی کاربران بر موارد انتشار یافته.

    سیستم چت و ارسال پیام سریع : با کمک این قابلیت یک کاربر Liferay می‌تواند با سایر کاربران پیغامهای سریعی را رد و بدل کند این مورد را می‌توان براحتی مدیریت نمود و دسترسی کاربران را محدود و کنترل نمود.Liferay قابلیت استفاده از سیستم اس ام اس را نیز دارا می باشد. البته باید برای این امر پیکره بندی شود.

    سیستم جستجو : یک سیستم پورتال سازمانی بدون داشتن قابلیت جستجو اصلاً مفید نیست.تمام اطلاعاتی که در یک سیستم پورتال وارد می‌شود با متدهای مختلف قابل جستجو است.

    مشخصات فنی سیستم پورتال Liferay:
    زبان برنامه نویسی : Java
    بانکهای اطلاعاتی : MySql – Oracle – SQL Server
    سیستمهای عامل : Windows – Linux
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۱۶

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 2


    تنظیم وضعیت برای یک Task

    در مثال ذکر شده در قسمت قبل هر چهار Task یک عبارت را در خروجی نمایش دادند حال می‌خواهیم هر Task پیغام متفاوتی را نمایش دهد.برای این کار از کلاس زیر استفاده می‌کنیم :

    System.Action<object>
    
    

    تنظیم وضعیت برای یک Task این امکان را فراهم می‌کند که بر روی اطلاعات مختلفی یک پروسه مشابه را انجام داد.

    مثال :

    namespace Listing_03 {
    
    class Listing_03 {
    
    static void Main(string[] args) {
    
    // use an Action delegate and a named method
    
    Task task1 = new Task(new Action<object>(printMessage),"First task");
    
    // use a anonymous delegate
    
    Task task2 = new Task(delegate (object obj) {
    
    printMessage(obj);
    
    }, "Second Task");
    
    // use a lambda expression and a named method
    
    // note that parameters to a lambda don�t need
    // to be quoted if there is only one parameter
    
    Task task3 = new Task((obj) => printMessage(obj), "Third task");
    
    // use a lambda expression and an anonymous method
    
    Task task4 = new Task((obj) => {
    
    printMessage(obj);
    
    }, "Fourth task");
    
    task1.Start();
    
    task2.Start();
    
    task3.Start();
    
    task4.Start();
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    static void printMessage(object message) {
    
    Console.WriteLine("Message: {0}", message);
    
    }
    
    }
    
    }
    
    

    کد بالا را بروش دیگری هم می‌توان نوشت :

    using System;
    
    using System.Threading.Tasks;
    
    namespace Listing_04 {
    
    class Listing_04 {
    
    static void Main(string[] args) {
    
    string[] messages = { "First task", "Second task",
    
    "Third task", "Fourth task" };
    
    foreach (string msg in messages) {
    
    Task myTask = new Task(obj => printMessage((string)obj), msg);
    
    myTask.Start();
    
    }
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    static void printMessage(string message) {
    
    Console.WriteLine("Message: {0}", message);
    
    }
    
    }
    
    }
    
    
    
    نکته مهم در کد بالا تبدیل اطلاعات وضعیت Task به رشته کاراکتری است که در عبارت لامبدا مورد استفاده قرار می‌گیرد. System.Action فقط با داده نوع object کار می کند.

    خروجی برنامه بالا بصورت زیر است :
    Main method complete. Press enter to finish.

    Message: Second task

    Message: Fourth task

    Message: First task

    Message: Third task

    البته این خروجی برای شما ممکن است متفاوت باشد چون در سیستم شما ممکن است Task ها با ترتیب متفاوتی اجرا شوند.با کمک Task Scheduler برا حتی می‌توان ترتیب اجرای Task ها را کنترل نمود.
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ۱۳۸۹/۱۰/۱۵

    یک تابع برای دریافت تگهای مرتبط به یک یا چند دسته (گروه) در ورد پرس


    ابتدا به پوشه wp-content\themes رفته و پوشه پوسته مورد نظرمان را پیدا کردم - مثلا پوسته پیش فرض twentyten.

    در مرحله بعدی فایل functions.php را برای ویرایش باز کردم.اگر این فایل رو پیدا نمی کردم باید زحمت ایجادش رو می کشیدم
    کد php زیر را در فایل نوشتم :

    function get_category_tags($args) {
     global $wpdb;
     $tags = $wpdb->get_results
     ("
      SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, null as tag_link
      FROM
       wp_posts as p1
       LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
       LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
       LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,
    
       wp_posts as p2
       LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
       LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
       LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
      WHERE
       t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
       t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
       AND p1.ID = p2.ID
      ORDER by tag_name
     ");
     $count = 0;
     foreach ($tags as $tag) {
      $tags[$count]->tag_link = get_tag_link($tag->tag_id);
      $count++;
     }
     return $tags;
    }
    
    در مرحله بعدی برای استفاده از تابع بالا در پوسته باید از کد زیر استفاده کنیم :

    $args = array('categories' => '12,13,14');
    $tags = get_category_tags($args);
    

    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    ارسال یک مقاله یا پست در وردپرس با ایمیل

    یکی از دوستان خیلی علاقه مند بود که در وب سایتش به خواننده این امکان را بدهد که اگر از یک مطلب خوشش آمد آن را به دیگران ایمیل کند.

    خلاصه چند روزی روی اعصابم بود باز جای شکرش باقی است که من اصلا با موبایل رابطه خوبی ندارم و گرنه منو دیوانه می کرد.
    بالاخره ناچار شدم یک تغییر کوچک در پوسته سایتش ایجاد کنم.چی کار کردم؟

    ابتدا به پوشه wp-content\themes رفته و پوشه پوسته مورد نظرمان را پیدا کردم - مثلا پوسته پیش فرض twentyten.

    در مرحله بعدی فایل functions.php را برای ویرایش باز کردم.اگر این فایل رو پیدا نمی کردم باید زحمت ایجادش رو می کشیدم
    کد php زیر را در فایل نوشتم :

    function direct_email($text="Send by email"){
            global $post;
            $title = htmlspecialchars($post->post_title);
            $subject = 'Sur '.htmlspecialchars(get_bloginfo('name')).' : '.$title;
            $body = 'I recommend this page : '.$title.'. You can read it on : '.get_permalink($post->ID);
            $link = ''.$text.'';
            return $link;
    }
    
    
    
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    اصول برنامه نویسی موازی درNET. نسخه 4 بخش اول - 1

    بدون هیچ مطلب اضافی به سراغ اولین مثال می رویم. قطعه کد زیر را در نظر بگیرید :

    using System;
    
    using System.Threading.Tasks;
    
    namespace Listing_01 {
    
    class Listing_01 {
    
    static void Main(string[] args) {
    
    Task.Factory.StartNew(() => {
    
    Console.WriteLine("Hello World");
    
    });
    
    // wait for input before exiting
    
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    }
    
    }
    
    

    در کد بالا کلاس Task نقش اصلی را بازی می کند.این کلاس قلب کتابخانه برنامه نویسی Task یا
    Task Programming Library می باشد.

    در این بخش با موارد زیر در مورد Task ها آشنا می شویم:


    - ایجاد و به کار انداختن انواع مختلف Task ها.
    - کنسل کردن Task ها.
    - منتظر شدن برای پایان یک Task.
    - دریافت خروجی یا نتیجه از یک Task پایان یافته.
    - مدیریت خطا در طول انجام یک Task

    خب بهتر است به شرح کد بالا بپردازیم:

    رای استفاده از کلاس Task باید فضای نام System.Threading.Tasks را بصورت ریر مورد استفاده قرار دهیم.

    using System.Threading.Tasks;
    
    

    این فضای نام نقش بسیار مهمی در برنامه نویسی Task ها دارد . فضای نام بعدی معروف است :

    System.Threading . اگر با برنامه نویسی ترید ها بروش مرسوم وکلاسیک آشنایی دارید قطعاً با این فضای نام آشنایی دارید. اگر بخواهیم با چندین Task بطور همزمان کار کنیم به این فضای نام نیاز مبرم داریم. پس :

    using System.Threading;
    
    
    خب رسیدیم به بخش مهم برنامه :

    Task.Factory.StartNew(() => {
    
    Console.WriteLine("Hello World");
    
    });
    
    
    متد استاتیک Task.Factory.StartNew یک Task جدید را ایجاد و شروع می‌کند که متن Hello Word را در خروجی کنسول نمایش می دهد. این روش ساده‌ترین راه برای ایجاد و شروع یک Task است.

    در بخش‌های بعدی چگونگی ایجاد Task های پیچیده‌تر را بررسی خواهیم کرد . خروجی برنامه بالا بصورت زیر خواهد بود:

    Main method complete. Press enter to finish.

    Hello World

    روشهای مختلف ایجاد یک Task ساده :

    - ایجاد کلاس Task با استفاده از یک متد دارای نام که در داخل یک کلاس Action صدا زده می شود. مثال :

    Task task1 = new Task(new Action(printMessage));
    
    
    - استفاده از یک delegate ناشناس (بدون نام). مثال :

    Task task2 = new Task(delegate {
    
    printMessage();
    
    });
    
    

    - استفاده از یک عبارت لامبدا و یک متددارای نام . مثال :
    Task task3 = new Task(() => printMessage());
    
    
    - استفاده از یک عبارت لامبدا و یک متد ناشناس (بدون نام). مثال :

    Task task4 = new Task(() => {
    
    printMessage();
    
    });
    
    

    قطعه کد زیر مثال خوبی برای چهار روشی که در بالا شرح دادیم می باشد:

    using System;
    
    using System.Threading.Tasks;
    
    namespace Listing_02 {
    
    class Listing_02 {
    
    static void Main(string[] args) {
    
    // use an Action delegate and a named method
    
    Task task1 = new Task(new Action(printMessage));
    
    // use a anonymous delegate
    
    Task task2 = new Task(delegate {
    
    printMessage();
    
    });
    
    // use a lambda expression and a named method
    
    Task task3 = new Task(() => printMessage());
    
    // use a lambda expression and an anonymous method
    
    Task task4 = new Task(() => {
    
    printMessage();
    
    });
    
    task1.Start();
    
    task2.Start();
    
    task3.Start();
    
    task4.Start();
    
    // wait for input before exiting
    Console.WriteLine("Main method complete. Press enter to finish.");
    
    Console.ReadLine();
    
    }
    
    static void printMessage() {
    
    Console.WriteLine("Hello World");
    
    }
    
    }
    
    }
    
    
    خروجی برنامه بالا بصورت زیر است :



    Main method complete. Press enter to finish.

    Hello World

    Hello World

    Hello World

    Hello World



    کته 1 : از مند استاتیک Task.Factory.StartNew برای ایجاد Task هایی که رمان اجرای کوتاه دارند استفاده می شود.

    نکته 2 : اگر یک Taskدر حال اجرا باشد نمی‌توان آنرا دوباره استارت نمود باید برای یک نمونه جدید از آن Task ایجاد نمود و آنرا استارت کرد.
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    پاک سازی اتوماتیک زباله دان در WordPress

    از نسخه 2.9 به بعد WordPress صاحب زباله دان شد.هر پست یا نظری که در سایت پاک می شود قبل از اینکه بطور کامل حذف شود در زباله دان قرار می گیرد تا در صورت نیاز بازیابی شود.

    خب من نیاز دارم هر چند روز یک بار این زباله دان را خالی کنم.اما انجام این کار بصورت دستی کمی......

    برای انجام این کار بصورت اتوماتیک ابندا فایل wp-config.php را باز می کنیم و تغییر زیر را در آن اعمال می کنیم :

    define('EMPTY_TRASH_DAYS', 10 );
    
    پارامتر دوم تعداد روزهای مورد نظر برای پاک کردن محتویات زباله دان است .
    در اینجا ما 10 روز را مشخص کردیم.
    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis

    اطلاع رسانی انتشار پستهای جدید به کاربران سایت یا وبلاگ ورد پرس

    از روزی که برنامه نویسی برای خصوصی سازی WordPress رو شروع کردم هر روز بیشتر بهش علاقه مند میشم. به نظرم اگر به php رو در حد متوسط بلد هستید و با کتابخانه ای مثل JQuery آشنایی دارید هر وب سایتی رو براحتی می تونید با ورد پرس طراحی کنید.

    اما اصل مطلب :

    قصدم این است که با ارسال ایمیل به کاربران سایت انتشار مطالب جدید را اطلاع دهم.ابتدا به پوشه wp-content\themes رفته و پوشه پوسته مورد نظرمان را پیدا می کنیم - مثلا پوسته پیش فرض twentyten.

    در مرحله بعدی فایل functions.php را برای ویرایش باز می کنیم.اگر این فایل رو پیدا نکردیم باید زحمت ایجادش رو بکشیم.
    کد php زیر را در فایل می نویسیم :

    function email_members($post_ID)  {
        global $wpdb;
        $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
        $users = implode(",", $usersarray);
        mail($users, "New WordPress recipe online!", 'A new recipe have been published on http://www.wprecipes.com');
        return $post_ID;
    }
    
    add_action('publish_post', 'email_members');
    
    

    بعد از دخیره فایل هر پستی که در سایت شما انتشار یابد یک ایمیل برای کاربران ثبت شده ارسال خواهد شد.

    منبع : کتابخانه توسعه وردپرس

    • Digg
    • Sphinn
    • del.icio.us
    • Facebook
    • Google
    • Furl
    • Reddit
    • StumbleUpon
    • Donbaleh
    • Technorati
    • Balatarin
    • twitthis