امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 4.5
  • 1
  • 2
  • 3
  • 4
  • 5
زندیق فریمورک php
نویسنده پیام
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #12
RE: زندیق فریمورک php
متاسفانه نمیتونم با github کنار بیام . نمیتونم درکش کنم که چطور کار میکنه!

(۰۷-مرداد-۱۳۹۲, ۱۷:۲۵:۳۳)babyy نوشته است: مشکلش توی هسته‌هست؛ قسمت لود کردن فایلها از آدرسهای نسبی استفاده کرده!
باید آدرس مطلق رو بدست بیاره ! چون اگه همینطوری پروژه بزرگ بشه آخر سر به مشکل بر میخوره!
آدرس رو از روت دادم . دقیق نمیشه آدرس داد چون ممکنه محل رویشه وب سرور توی سرور های مختلف متفاوت باشه.

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۰۹-مرداد-۱۳۹۲, ۱۹:۰۵:۴۸
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #13
RE: زندیق فریمورک php
تو همون کد پلکس هم خوبه
(۰۹-مرداد-۱۳۹۲, ۱۹:۰۵:۴۸)morrning نوشته است: آدرس رو از روت دادم . دقیق نمیشه آدرس داد چون ممکنه محل رویشه وب سرور توی سرور های مختلف متفاوت باشه.
چرا نمیشه؟

کد:
index.php
<?PHP
ob_start();
include_once("./core/run.php");
?>
این طوری اون ارور های hader already send دیگه نمیاد

کد:
run.php
define('abspath',str_replace('\\','/',dirname(dirname(__file__))));

    if(!file_exists(abspath."/core/config.php")){
        #going to start install system
        include_once(abspath."/perpare/sys_install.php");
    }
    else{
        include_once("config.php");
        #perpare I/O system and IO class
        #with this class devalopers can send and get data without echo and .... functions
        include_once(abspath."/core/classes/io.php");
        $sys_io = new sys_io;
        #perpare database that set in config file
        include_once(abspath."/core/classes/database/database.php");
        #perpare calendar system
        include_once(abspath."/core/classes/calendar/calendar.php");
        #class for control seasions
        include_once(abspath."/core/classes/session.php");
        #class for control validat varible
        include_once(abspath."/core/classes/validator.php");
        #class for working with cookies
        include_once(abspath."/core/classes/cookie.php");
        #class for working with general works
        include_once(abspath."/core/classes/general.php");
        #reading function list;
        include_once(abspath."/core/classes/theme.php");
        #reading function list;
        include_once(abspath."/core/functions/functions.php");
        #start that program user write that in www folder
        include_once(abspath."/www/start.php");
    }
این طوری ادرسها و ارجاعات فیزیکی و درست درمیان

کد:
config.phpdefine ("LanguageFolder",abspath."/www/langages");


#this constant return site root http address
$root=str_replace('\\','/',dirname(__dir__));
$root=str_replace($_SERVER['DOCUMENT_ROOT'],'',$root) ;
define ("SiteRoot","http://{$_SERVER['SERVER_NAME']}$root");

#this const is for difine cms plugins folder
define ("PluginFolder",abspath."/www/plugin/");");
در این حالت چه رو لوکال ه رو سرور همیشه درست جواب میده

فعلا مشکلاتش با این تغییرات رفع شده

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۰-مرداد-۱۳۹۲, ۱۱:۵۳:۳۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : morrning, babyy
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #14
RE: زندیق فریمورک php
کد:
این طوری اون ارور های hader already send دیگه نمیاد

از لوکال مشکل ارسال هدر ها براتون پیش میاد یا روی هاستینگ؟

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۱۰-مرداد-۱۳۹۲, ۱۴:۰۳:۴۱
ارسال‌ها
پاسخ
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #15
RE: زندیق فریمورک php
کلاس صحت سنج رو تغییرات اساسی دادم.در مورد این کلاس براتون توضیح میدم.
ابتدا سورس کلاس:
کد:
<?php
#this class is for auth user and ect
class validator{
private $db;
    function __construct($id=""){
        $this->db= new cls_database;
        $this->db->do_quary("select * from " . TablePrefix . "settings;");
        $row=$this->db->get_first_row_array();
        $last_check_refresh = NextValidatorRefresh + $row['LastValidatorRefresh'];
        if($last_check_refresh < time()){
        $this->refresh();    
        }
    }
    #this function get validate id from cookie and session
    public function get_id_from_pc($type){
            $obj_session = new session;
            $from_session = $obj_session->get($type);
            $obj_cookie = new sys_cookie;
            $from_cookie = $obj_cookie->get($type);
            if($from_cookie==$from_session && $from_cookie!=''){ return $from_cookie;}
            elseif($from_cookie==''){ return $from_session;}
            elseif($from_session==''){ return $from_cookie;}
    }
    #this function for add validate number
    public function add($type, $cookie = false, $id=''){
        if($id=='') {
            #get new id
            $id = $this->get_id();
        }
            #ADD TO SESSION
            $obj_session = new session;
            $obj_session->set($type,$id);
            
        if($cookie){
            $obj_cookie = new sys_cookie;
            $obj_cookie->set($type,$id);
            }
            
        if ($this->is_valid($type)){
            $this->update($type);
            return $id;
        }
        $this->db->do_quary("insert into " . TablePrefix . "validator (vid,experid,validator_source) values (?,?,?);", array($id,ValidatorTime,$type));
            return $id;;
        
    }
    #this function check id of validatoor and return T/F
    public function is_valid($type){
        $obj_io = new sys_io;
        $obj_session = new session;
        $obj_cookie = new sys_cookie;
        #check for that user loged in before vith validator class
        
         $valid_num = $this->get_id_from_pc($type);
        if($valid_num!=''){
                #going to check validate from database
                if($this->is_free($type,$valid_num)){ return false;}
                else{   return true;}
        }
            
        return false;
    }
    
    public function update($type){
        if(!$this->is_valid($type)){return false;}
        $this->db->do_quary("update " . TablePrefix . "validator set experid='" . ValidatorTime . "' where vid=?;", array($type));
        return true;
    }
    
    #this function is for delete validator id
    public function delete($type){
        $this->db->do_quary("delete from " . TablePrefix . "validator where vid=?;", array($type));
        return true;
    }
    #this function is for generate id
    public function get_id($type='core'){
        $obj_general = new sys_general;
        
        do{
            $id = $obj_general->get_random_string(32);
        }
            while(!$this->is_free($type,$id));
            
        return $id;
    }
    #this function check for that id is valid in database
    public function is_free($type,$id){
    
    $result= $this->db->do_quary("select * from " . TablePrefix
        . "validator where vid=? and experid >" . time() . " and validator_source=?;" ,array($id,$type));
        if($this->db->rows_count()==0){
            return true;}
            
            return false;
        
        
    }
    #this function is for refresh database validator list
    private function refresh(){
        #clear old data from database
        $this->db->do_quary("delete from " . TablePrefix . "validator where experid<?;", array(time()));
        #update next check for refresh database
        $this->db->do_quary("update " . TablePrefix . "settings set LastValidatorRefresh=?;", array(time()));
        return true;
    }
    
}
?>
این کلاس کار صحت سنجی اطلاعات کاربرا و پلاگین های مختلف رو انجام میده . در واقع با این کلاس یه عدد تصادفی ایجاد میکنیم و این عدد رو در نشست و کوکی (به دلخواه ذخیره میکنیم) . اسم یا اندیس کوکی یا نشست همون منبعی هست که از این اطلاعات استفاده میکنه و رشته ذخیره شده علاوه بر ذخیره در نشست و کوکی در اختیار پلاگین یا برنامه ای که ازش استفاده میکنه قرار میگیره .
یه مثال میزنم :
پلاگین user رو در نظر بگیرید .
کد:
#this function do login proccess
    public function user_login($username,$password,$remember=false){
    if($this->is_logedin()){
        #user is loged in before
        return true;}
    elseif($username=='' || $password==''){
        #invalid data input
        return false;}
    else{
        #going to check data input
        $obj_db = new cls_database;
        $obj_validator = new validator;
        $password = md5($password);
        $obj_db->do_quary('select username from ' . TablePrefix . 'users where username=? and password=?;',array($username,$password));
            if($obj_db->rows_count()!=0){
                $obj_db->do_quary("update " .
                TablePrefix . "users set validator_id=? where username=?;",array($obj_validator->add('SYS_USER',$remember),$username));
                return true;
            }
            else{
                return false;
            }
            
        }
        
    }

اگه به فایل loader.php این پلاگین نگاه کنید در متد user_login بعد از اینکه مطمئن شدیم نام کاربری و کلمه عبور درسته اومدیم یه کد صحت سنج به کاربر اختصاص دادیم که برای پلاگین user کلمه 'SYS_USER' هست.
بعد از از استفاده از متد ADD کلاس VALIDATOR یک رشته تصادفی در کوکی و نشست ذخیره میشه علاوه بر اون این رشته و تاریخ انقضای اون و کلمه صحت سنج در جدول validator ذخیره میشه(در بانک اطلاعاتی)
در آخر اون رشته تصادفی هم برای پیگیره صحت در ستون validator_id در جدول users ذخیره میشه.

خوب استفاده این کد چی بود؟
استفادش اینجوریه که از این به بعد از هر جای برنامه که بخوایم چک کنیم کاربر لوگین کرده یا نه فقط کافیه صحت کد سورس رو بررسی کنیم . برای این کار ابتدا یه شی از کلاس validator ایجاد میکنیم و با متد is_valid کد سورس رو بررسی میکنیم و شی به ما true/false پس میفرسته.
کد:
#return t/f user loged in before
    public function is_logedin(){
        $obj_validator = new validator;
        #check for that user loged in before vith validator class
        if($obj_validator->is_valid('SYS_USER')){
            return true;
        }
        return false;
    }

همچنین تاریخ انتقضای صحت سنج ها از طریق فایل کانفینگ قابل تغییر هست
کد:
define ("ValidatorTime",time() + 3600);
3600 رو فقط تغییر بدید که برابر یک ساعت هست

[تصویر:  zendighpreview_3.jpg]
برای دانلود نسخه جدید روی لینک زیر کلیک کنید.
http://s3.picofile.com/file/7873156020/z...4.zip.html
تغییرات
>> تغییر کلاس validator
>> افزودن ویجت انتخاب زبان
>> تکمیل بخش ورود به سایت و خروج (پلاگین user)

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
(آخرین ویرایش در این ارسال: ۱۰-مرداد-۱۳۹۲, ۲۰:۴۶:۱۰، توسط morrning.)
۱۰-مرداد-۱۳۹۲, ۲۰:۱۴:۴۹
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #16
RE: زندیق فریمورک php
امروز یه ساعتی وقتم آزاد شد , دست به کار شدم و قسمتی از پلاگین یوزر رو توسعه دادم .

>> تکمیل بخش ورود به سایت (یکی از پیج های پلاگین یوزر)
>>تکمیل ویجت منو کاربری (ورود عضویت و خروج)
>>تغییر در کلاس validator
>>رفع مشکل متد site_refresh و افزودن متد jump_page به کلاس sys_general
>>تغییر در کلاس theme متد position (استفاده در فایل قالب برای جاگذاری ویجت ها)
>>تغییر در loader پلاگین یوزر و رفع یک مشکل امنیتی
[تصویر:  zendigh_preview4.jpg]
برای دریافت نسخه جدید روی لینک زیر کلیک کنید.
http://s3.picofile.com/file/7875147525/z...1.rar.html

در روزهای آینده سعی میکنم یه آموزش نوشتن پلاگین هم بنویسم.
بعد از اتمام پلاگین user روی پلاگین admin (محیط مدیریت) کار میکنم البته نمیخوام بخش مدیریت به صورت جدا باشه بلگه به صورت یه پلاگین مثل بقیه پلاگین ها باشه که در موارد امنیتی بشه فعال یا غیر فعالش کرد.

دوستان کسی هست بتونه در توسعه کمک کنه؟

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۱۲-مرداد-۱۳۹۲, ۰۰:۳۸:۵۲
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #17
RE: زندیق فریمورک php
نسخه جدید :

تغییرات
>> پشتیبانی از عنوان صفحات در page های پلاگین ها : تنظیم توست کد زیر
1

کد:
$this->page_tittle='my page'

>> افزودن تابع output_filter برای فیلتر نهایی خروجی ها و جلوگیری از لود شدن زیاد توابع
>> ادغام تابع show content و load_header در کلاس theme
>>تغییر در تابع _e و افزودن آرگومان print به آن .(این تابع وظیفه ترجمه رشته ها به زبان های فعال را انجام میدهد)
>>ویرایش loader.php پلاگین های user , language

برای دریافت نسخه جدید روی لینک زیر کلیک کنید.
http://s2.picofile.com/file/78771389...gh513.zip.html

همچنین با مراجعه به لینک زیر میتونید دمو رو مشاهده کنید.(این دمو با انتشار نسخه های جدید به روز میشود)
http://heefal.ir

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۱۳-مرداد-۱۳۹۲, ۱۴:۲۷:۵۰
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #18
RE: زندیق فریمورک php
الان هستش کامل شده؟
۱۳-مرداد-۱۳۹۲, ۱۶:۱۷:۲۳
وب سایت ارسال‌ها
پاسخ
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #19
RE: زندیق فریمورک php
فعلا نه. چون میخوام برای بازدید های بالا اپتیمایز شده باشه باید کلاس هایی هم برای کش کردن اطلاعات و لود قالب ها طراحی کنم.
اینو به عنوان پروژه انتخاب کرده بودم که سازو کارشو شرح بدم که تحویلشم دادم ولی الان نمیدونم چرا دارم توسعش میدم؟
اگه چند نفر کمک کنند میشه تا یه جاهایی رسوندش.

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۱۳-مرداد-۱۳۹۲, ۱۸:۲۴:۰۸
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #20
RE: زندیق فریمورک php
من نظرم اینه که اول به عنوان پروژتون تحویل بدید و نمره بگیرید و بعد برای بهتر شدنش تلاش کنید
تلاش هم اول روی هسته باشه و بعد روی cms ای که با این هسته مینویسید؛‌
چون الان هدف پروژه دادن هست و وقتتون رو روی هردو قسمت دارین میزارین؛ و ای خوب نیست؛ چون هسته مهم تر از ظاهر و . . . . هست
۱۳-مرداد-۱۳۹۲, ۱۸:۳۰:۲۲
وب سایت ارسال‌ها
پاسخ
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #21
RE: زندیق فریمورک php
پروژه رو که تحویل دادم و نمرشم گرفتم .
الان خودم چون دوست دارم توسعش میدم وگرنه بحث نمره و ... در میون نیست.
فعلا فقط روی توسعه هسته و و چند پلاگین ضروری دارم کار میکنم. بعد از اینکه توسعه هسته متوقف شد اون وقت میرم سر وقت پلاگین هایی که بیشتر بهشون نیاز هست.

(۱۰-مرداد-۱۳۹۲, ۱۱:۵۳:۳۶)lord_viper نوشته است: تو همون کد پلکس هم خوبه
(۰۹-مرداد-۱۳۹۲, ۱۹:۰۵:۴۸)morrning نوشته است: آدرس رو از روت دادم . دقیق نمیشه آدرس داد چون ممکنه محل رویشه وب سرور توی سرور های مختلف متفاوت باشه.
چرا نمیشه؟

کد:
index.php
<?PHP
ob_start();
include_once("./core/run.php");
?>
این طوری اون ارور های hader already send دیگه نمیاد

کد:
run.php
define('abspath',str_replace('\\','/',dirname(dirname(__file__))));

    if(!file_exists(abspath."/core/config.php")){
        #going to start install system
        include_once(abspath."/perpare/sys_install.php");
    }
    else{
        include_once("config.php");
        #perpare I/O system and IO class
        #with this class devalopers can send and get data without echo and .... functions
        include_once(abspath."/core/classes/io.php");
        $sys_io = new sys_io;
        #perpare database that set in config file
        include_once(abspath."/core/classes/database/database.php");
        #perpare calendar system
        include_once(abspath."/core/classes/calendar/calendar.php");
        #class for control seasions
        include_once(abspath."/core/classes/session.php");
        #class for control validat varible
        include_once(abspath."/core/classes/validator.php");
        #class for working with cookies
        include_once(abspath."/core/classes/cookie.php");
        #class for working with general works
        include_once(abspath."/core/classes/general.php");
        #reading function list;
        include_once(abspath."/core/classes/theme.php");
        #reading function list;
        include_once(abspath."/core/functions/functions.php");
        #start that program user write that in www folder
        include_once(abspath."/www/start.php");
    }
این طوری ادرسها و ارجاعات فیزیکی و درست درمیان

کد:
config.phpdefine ("LanguageFolder",abspath."/www/langages");


#this constant return site root http address
$root=str_replace('\\','/',dirname(__dir__));
$root=str_replace($_SERVER['DOCUMENT_ROOT'],'',$root) ;
define ("SiteRoot","http://{$_SERVER['SERVER_NAME']}$root");

#this const is for difine cms plugins folder
define ("PluginFolder",abspath."/www/plugin/");");
در این حالت چه رو لوکال ه رو سرور همیشه درست جواب میده

فعلا مشکلاتش با این تغییرات رفع شده

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

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
(آخرین ویرایش در این ارسال: ۱۳-مرداد-۱۳۹۲, ۱۹:۲۱:۰۶، توسط morrning.)
۱۳-مرداد-۱۳۹۲, ۱۹:۱۷:۲۶
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
morrning آفلاین
كاربر دو ستاره
**

ارسال‌ها: 82
موضوع‌ها: 10
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 17
( 138 تشکر در 55 ارسال )
ارسال: #22
RE: زندیق فریمورک php
نسخه جدید
تغییرات:

>>افزودن کلاس sys_plugin برای مدیریت پلاگین ها
>>ادغام متد sys_inhert در کلاس پلاگین
توسط این متد میشه از فایل loader در php کلاس های دیگه استفاده کرد.
خروجی این تابع یک شی از لودر آرگومان رودی هست.
>> تغییر در لود پلاگین user و افزودن چند متد.
>> افزودن پلاگین entry برای نمایش محتوا(غیر کامل: فقط نمایش محتوا)
>>تغییر در سیستم سطح دسترسی کاربران. میتوان n سطح دسترسی تعریف کرد و کاربران را در هر سطح دسترسی قرار داد.
>>تغییر در کلاس validator :پایان نسخه آلفا از کلاس validator

لازم دونستم یه توضیحی درباره متد sys_inhert از کلاس sys_plugin بدم که توسط این تابع میتونید یک شی از یه پلاگین دیگه داشته باشد و در واقع از کتد ها و اکشن های کلاس های دیگه استفاده کنید.
این روش (پلاگین های پیش نیاز) رو با بررسی ساختار سیستم مدیریت محتوای دروپال بهش رسیدم . اما ساختار پیاده سازی کلا با دروپال فرق داره. توسط این متد میتونید از پلاگین های مختلف استفاده کنید و پلاگین های بهتری بسازید.
مورد بعدی اینکه کلاس validator به حد نساب توسعه داده شده و تا پایان نسخه آلفا دیگه توسعه داده نمیشه.(در مورد استفاده این کلاس در پست های قبل توضیح دادم)

برای دانلود نسخه جدید روی لینک زیر کلیک کنید.
http://s2.picofile.com/file/7880306020/z...5.zip.html

بابکا مرد نکونام نمیر هرگز    مرده آنست که نامش به نکویی نبرند  :lol:
۱۵-مرداد-۱۳۹۲, ۰۱:۰۹:۳۵
ارسال‌ها
پاسخ
تشکر شده توسط : babyy


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS