
рд╕реБрдкреНрд░рднрд╛рдд, рдкреНрд░рд┐рдп рдЧреГрд╣ рдкрд╛рдардХреЛрдВ!
рдХреНрдпрд╛ рдЖрдк рдХрднреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡рд┐рдиреАрдд рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдерд╛ред рддрд╛рдХрд┐ рдПрдХ рдмрд╛рд░ рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдЦрд┐рдд рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рдорд╛рдореВрд▓реА рдорд╛рдЗрдХреНрд░реЛрдмрд╛рдЗрдХ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рд╛рдЗрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХрдард┐рди рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдкрд░рд┐рдЪрд┐рдд рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓рд╛, рдФрд░ рдореИрдВ рдЖрдкрдХреА рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдЙрд╕реА рдирд╕ рдореЗрдВ рдЬрд╛рд░реА рд░рд╣рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:
1) рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП - рдЯреЗрдореНрдкреНрд▓реЗрдЯ, рдореЙрдбрд▓ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХред рддрд╛рдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
2) рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╡рд╣ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рди рдХреЗрд╡рд▓ рдореЗрд░реА рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдореЗрд░реЗ рд╕рднреА рджреЛрд╕реНрддреЛрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рднреА рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рднреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдХреЗ рдбрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
3) рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред
4) рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
5) рдореЙрдбреНрдпреВрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдВрдХ (рдПрдХ href = ...) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд┐рддрдирд╛ рдЧрд╣рд░рд╛ рд╣реЛред рдЕрдЧрд░ рд╣рдо рдПрдХ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рдХреЙрд░реНрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
6) рд╕рд╛рдЗрдЯ рдЦреБрдж рднреА рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдПред рдХрд┐рд╕реА рдорд┐рддреНрд░ рд╕реЗ рдХрд╛рд░реНрдп рд╕реНрдерд▓ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреГрд╖реНрда рдкрд░ рд╕рднреА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░реЗрдВред
рдЦреИрд░, рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЪрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░реЗрдВ:
/nome/user/www/ |---[.myengine] // | |---[classes] // | |---autoload.php // , | `---README.TXT // |---[classes] // | |---[articles] // | | |---[m] // | | | `---article.class.php // ( : articles_m_article) | | |---[view] // CSS | | | |---[css] // | | | | `---style.css // | | | |---article_list.tpl // | | | `---one_article.tpl // | | `---controller.class.php // ( : articles_controller) | |---[comments] // | |---[fotos] // | |---[site] // ( ) | `---[users] // |---.setup.php // ( , ..) `---index.php //
рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк
рд╕рд┐рд╕реНрдЯрдо рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдВ рд╣рдо рдЙрди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓, рдХреБрдЫ рдСрдЯреЛрд▓реИрдб.php рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдлреЛрд▓реНрдбрд░ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдпреЛрдЧреНрдп (рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреНрд▓реЛрдмрд▓ рд╡реИрд░рд┐рдПрдмрд▓) рдпрд╛ рдЙрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕реЗ рдХрдИ рд░рд╛рд╕реНрддреЗ рд╣реЛрдиреЗ рджреЗрдВрдЧреЗред рдЦреИрд░, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХреЗ рджреЛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдПрдХ рдирд┐рдЬреА, рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рд╕рд╛рдЭрд╛ - рд╕рд╛рдореВрд╣рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдПред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ / .myengine/classes - рдпреЗ рд╣рдорд╛рд░реЗ рдЗрдВрдЬрди рдХреЗ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдЬреЛ рд╣рдо рдЕрдкрдиреА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдП / рдХрдХреНрд╖рд╛рдПрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред
рддреЛ, autoload.php рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдпрдВ :
<?php // PHP, , new SomeClass() function __autoload($class_name){ $class_folder = 'classes'; // // // $class_folder. $class_paths[] = dirname($_SERVER['SCRIPT_FILENAME'])."/$class_folder/"; // $class_paths[] = __DIR__."/classes/"; // $CLASS_PATHS if(!empty($GLOBALS["CLASS_PATHS"])){ if(!is_array($GLOBALS["CLASS_PATHS"])) throw new Exception('$CLASS_PATHS must be array!'); $class_paths = array_merge($class_paths, $GLOBALS["CLASS_PATHS"]); } // ( A_B_C) $slashed_class_name = str_replace("_", "/", $class_name); // A/B/C $short_path = substr($slashed_class_name, 0, strrpos($slashed_class_name, '/')); // A/B foreach($class_paths as $class_path){ // A_B_C /A/B/C.class.php $file_full_name = "{$class_path}/{$slashed_class_name}.class.php"; if(file_exists($file_full_name)){ require_once($file_full_name); return; } // A_B_C /A/B/C/A_B_C.class.php // - ( ) $file_full_name = "{$class_path}/{$slashed_class_name}/{$class_name}.class.php"; if(file_exists($file_full_name)){ require_once($file_full_name); return; } } } ?>
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╛рдЗрд▓ рдкрд░ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╡реИрд╢реНрд╡рд┐рдХ $ CLASS_PATHS рд╕рд░рдгреА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкрде рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдирд╛рдИред рдСрдЯреЛрд▓реЙрдб рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдореЙрдбрд▓ рдкрдереЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрдХреНрд░ рдХрд░реЗрдЧрд╛:
1) рдкрд╣рд▓реА рдмрд╛рд░ рдмреБрд▓рд╛рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦреЗрдВ
2) рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдЗрдВрдЬрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреЗрдЦреЗрдВ
2) рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рдпрд╣ $ CLASS_PATHS рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдЧрд╛ред
рдореИрдВ $ CLASS_PATHS рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЙрд▓ рд╕рдордп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЫреЛрдЯрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд .setup.php рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдкрд░, рд╕рд╛рде рд╣реА рдЙрди рд╕рднреА рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдБ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PHP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░реВрдЯ .setup.php рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА:
<?php include __DIR__.'.myengine/autoload.php'; // // , ?>
рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА .setup.php рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╢реАрд░реНрд╖-рд╕реНрддрд░ .setup.php рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛:
<?php // .setup.php : include __DIR__.'/../.setup.php'; ?>
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ:
<?php include '.setup.php'; // -- // , $m = new SomeModule(); $m->run(); echo $m->getOutput(); ?>
рдФрд░ рдлрд┐рд░, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ (рдЬреЛ рдХрд┐рд╕реА рднреА рд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рд╣реИ), рд╣рдореЗрдВ рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рдорд╛рд░реНрдЧ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕рд╣рд┐рдд, рд╡рд┐рджреНрдпреБрдд рдЯреЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ gluing рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рд╣реИ, рдЕрдЧрд░ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЬрдЯрд┐рд▓ рд╣реИрдВ - рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕реЗ рдкрд╛рд╕реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рджреВрд╕рд░реЗ рдХреЛ рдЦреАрдВрдЪрддреА рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдПрдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ - рдореЙрдбреНрдпреВрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ - рд╡реЗ рдЦреБрдж рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ PHP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддрд╛ рд╣реИ - ".setup.php" рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдиреЛрдЯ: рдХреБрдЫ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ 'рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред' (рдбреЙрдЯреНрд╕) рддрд╛рдХрд┐ рдирд╛рдо рд╕реЗ рдЫрд╛рдВрдЯрдиреЗ рдкрд░ рд╡реЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реЛрдВ
рдореЙрдбреНрдпреВрд▓ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ
рдореЙрдбреНрдпреВрд▓ рдХрдХреНрд╖рд╛рдПрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд▓реЗрдЧреЛ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВред рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕ рдкрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ, рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
abstract class Lego{ .................. // http://habrahabr.ru/company/microset/blog/109481/ abstract public function getDir(); // , // (.. , ) public function getWebDir(){ $viewdir = str_replace('\\', '/', $this->getViewDir()); // , //, ! DOCUMENT_ROOT: return str_ireplace($_SERVER['DOCUMENT_ROOT'], '', $viewdir).'/'.$dirname; } // -, public function getJavascripts(){ $js = array(); $h = @opendir($this->getDir()."/js"); while($file = @readdir($h)) if(preg_match("/(\.js|\.js\.php)$/i", $file)) $js[] = $this->getWebDir()."/js/".$file; return $js; } // , public function getStylesheets(){ $css = array(); $h = @opendir($this->getDir()."/view/css"); while($file = @readdir($h)) if(preg_match("/(\.css|\.css\.php)$/i", $file)) $css[] = $this->getWebDir()."/view/css/".$file; return $css; } // , , public function getHeaderBlock(){ $csses = $this->getStylesheets(); $jses = $this->getJavascripts(); $ret = ""; foreach($csses as $one) $ret .= "\n<link rel='stylesheet' href='{$one}' type='text/css' media='screen' />\n"; foreach($jses as $one) $ret .= "\n<script type='text/javascript' src='{$one}'></script>\n"; return $ret; } // ( , ) public function fetch($template){ return Smarty::fetch($this->getDefaultDir().'/view/'.$template); } }
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ, рдЬрд╛рд╡рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ: рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдВрдХ рдХреИрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ? рд╕рдм рдХреЗ рдмрд╛рдж, рд╡реЗ рднреА рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдирдЯрд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рд╕рд╛рдкреЗрдХреНрд╖ рд▓рд┐рдВрдХ
рдпрджрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЧреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд░рдгреА рдЪрд░ рдХреЛ рдХрд┐рд░рд╛рдП рдкрд░ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдХреБрдЫ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдкрддрд╛ рдмрд╛рд░ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдХреЗ GET рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд▓рд╕реА рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП UriConstrucor class рдмрдирд╛рдПрдВ:
// class UriConstructor{ public $arr; public function __construct($arr = false){ $this->arr = $arr ? $arr : $_GET; } // ( ) public function put($key, $val){ $this->arr = array_replace_recursive($this->arr, array($key => $val)); return $this; } // public function remove($key){ unset($this->arr[$key]); return $this; } // public function clear(){ $this->arr = array(); return $this; } // public function set($lego_name, $action /*....*/){ if(isset($this->arr[$lego_name]) && !is_array($this->arr[$lego_name])) unset($this->arr[$lego_name]); $this->arr[$lego_name]['act'] = $action; $params = func_get_args(); array_shift($params); array_shift($params); foreach($params as $key=>$one){ $this->arr[$lego_name][$action][$key] = $one; } return $this; } // , public function setAct($action /*....*/){ $lego = Lego::current(); $params = array($lego->getName()); $params = array_merge($params, func_get_args()); return call_user_func_array( array($this, "set"), $params ); } // get-, ( ) public function url($path = false){ if(!$path) $path = $_SERVER['SCRIPT_NAME']; return $path.'?'.$this; } // - GET- public function __toString(){ return http_build_query($this->arr); } // GET- public function asArray(){ return $this->arr; } }
рдФрд░ рд▓реЗрдЧреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рд╣рдо рдХреБрдЫ рдФрд░ рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
abstract class Lego{ .................. // public function uri(){ return new UriConstructor(); } // , , href // action- , , public function actUri($action /* params */){ $params = func_get_args(); array_unshift($params, $this->getName()); return call_user_func_array( array($this->uri(), "set"), $params ); } }
рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рд▓рд┐рдВрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
<a href="{$lego->actUri('allfotos')->url()}"> </a> , , : <a href="{$lego->actUri('showonefoto', $id)->url()}"> </a> // : <a href="/index.php?.....__...&fotos[act]=showonefoto&fotos[0]=123">....</a>
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд▓реЗрдЧреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ $ рд▓реЗрдЧреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдЙрдкрд▓рдмреНрдз рд╣реЛред рдпрд╣ рд▓реЗрдЧреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд░рди () рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
abstract class Lego{ .................. // public function run(){ Smarty::assign("lego", $this); // $lego - ..... // } }
рдЕрдм, рдЕрдм рд╣рдордиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рднреА рдЦреЛрд▓ рджрд┐рдпрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдпрд╣ рдЬрд╛рдирдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдХреМрди рд╕рд╛ рдореЙрдбреНрдпреВрд▓, рд╡реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓-рдлрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрд╢рдХ, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
/* , , $entity_id $entity_name */ class fotos_controller extends Lego{ private $entity_id; private $entity_name; private $num_for_page = 5; // ( ), function __construct($name = false, $entity_id = 0, $entity_name = "User"){ parent::__construct($name); $this->entity_id = $entity_id; $this->entity_name = $entity_name; } // , Lego. public function getDir(){ return __DIR__; } // - // , function action_index(){ Database::query("select * from `fotos` where `entity_name`='{$this->entity_name}' and `entity_id`={$this->entity_id} and deleted = 0 order by created desc"); $fotos = Database::fetchObjects(); Output::assign("fotos", $fotos); return $this->fetch("allfotos.tpl"); } // function action_mainbar(){ $offset = $this->_get($this->getName()."_offset", 0); Database::query("select * from `fotos` where `entity_name`='{$this->entity_name}' and `entity_id`={$this->entity_id} and deleted = 0 order by created desc limit {$offset}, ".($this->num_for_page+1)); $fotos = Database::fetchObjects(); Output::assign("fotos", $fotos); Output::assign("offset", $offset); Output::assign("num_for_page", $this->num_for_page); return $this->fetch("lego_fotos.tpl"); } // function action_sidebar(){ return $this->action_mainbar(); } // ( POST) function action_submit(){ $f = new tbl_fotos(); $f['entity_name'] = $this->entity_name; $f['entity_id'] = $this->entity_id; $f['user_id'] = User::getCurrentUser()->getId(); $f['text'] = $this->_post($this->getName()."_text"); $f['file_id'] = FotoStorage::putFromPost($this->getName()."_file"); if($f['file_id']) $f->insert(); $this->_goto($this->actUri("mainbar")->url()); //_goto - header("Location: ... } // function action_showone($foto_id){ $f = new tbl_fotos($foto_id); Output::assign("foto", $f); $ret = $this->fetch("showone.tpl"); // . $c = new comments_controller("foto_comments", "tbl_fotos", $f->getId()); $c->run(); return $ret.$c->getOutput(); // } // " " function action_set_as_main($foto_id){ Auth::authorize(); $f = new tbl_fotos($foto_id); $user = $f->getOwner(); $user['foto'] = $f['file_id']; $user->update(); $this->_goto($this->actUri("showone", $foto_id)->url()); } // " " function action_delete($foto_id){ Auth::authorize(); $f = new tbl_fotos($foto_id); //FileStorage::delete($f['file_id']); if($f->isMain()){ $user = User::getCurrentUser(); $user['foto'] = ""; $user->update(); } $f['deleted'] = 1; $f->update(); $this->_goto($this->actUri("showone", $foto_id)->url()); } // " " function action_restore($foto_id){ Auth::authorize(); $f = new tbl_fotos($foto_id); $f['deleted'] = 0; $f->update(); $this->_goto($this->actUri("showone", $foto_id)->url()); } }
рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓, рд╕рд╛рдЗрдЯ рдХреЗ рд░реВрдЯ рдореЙрдбреНрдпреВрд▓ рд╕рд╣рд┐рдд, рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓ рдореЗрдВ index.php рд╣реИ:
<?php include ".setup.php"; // $lego = new site_controller(); // - $lego->run(); // echo $lego->getOutput();// ! ?>
рдмрд╕ рдЗрддрдирд╛ рд╣реАред
рдХреИрд╕реЗ рд▓реЗрдЧреЛ-рдореЙрдбреНрдпреВрд▓ рдЬреАрд╡рди-рджреЗрдиреЗ рд╡рд╛рд▓реЗ AJAX рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рдЖрдк рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ AJAX рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рд╕рднреА рд╕рдлрд▓ рд▓реЗрдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред :)
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рдореЗрд╢рд╛ рддреБрдореНрд╣рд╛рд░рд╛, рдЬреЛрдЬрд╝рд┐рдХред