example.com/news/article/my_article
example.com/class/function/ID
URL მისამართის სეგმენტები, Model-View-Controller პრინციპის მიხედვით განსაზღვრავენ:
example.com/index.php/news/article/my_article
URL-დან მისი წაშლა შესაძლებელია .htaccess ფაილის მეშვეობით
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
მოყვანილ მაგალითში ნებისმიერი HTTP მოთხოვნა, რომელიც განსხვავდება არსებული დირექტორიების ან ფაილების მოთხოვნისაგან, აღიქმნება index.php
ფაილის მოთხოვნად.
.htaccess ფაილში განსაზღვრულმა წესებმა შეიძლება არ იმუშავოს ყველანაირი სერვერული კონფიგურაციისათვის.
index.php?c=products&m=view&id=345
თუ გავხსნით application/config.php ფაილს დავინახავთ შემდეგ ჩანაწერებს
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
თუ $config მასივის 'enable_query_strings' გასაღების მნიშვნელობად მივუთითებთ TRUE-ს, მაშინ შესძლებელი იქნება გავხსნათ შემდეგი ტიპის URL
მისამართები
index.php?c=controller&m=method
example.com/index.php/blog/
ამ მისამართზე შესვლისას CI შეეცდება მოძებნოს კონტროლერი Blog.php და ჩატვირთოს იგი. როდესაც კონტროლერის დასახელება დაემთხვევა URI-ის
პირველ სეგმენტს, მოხდება ამ კონტროლერის ჩატვირთვა.
<?php
class Blog extends CI_Controller{
public function index(){
echo "Hello Georgia";
}
}
?>
Blog კლასი არის CI-ში ჩაშენებული კლასის CI_Controller-ის მემკვიდრე კლასი. ფაილს უნდა დავარქვათ აუცილებლად Blog.php
"B" დიდი ასოთი, აგრეთვე დიდი ასოთი უნდა დაიწყოს კონტროლერის კლასის დასახელებაც.
http://www.your-domain.com/index.php/blog
ბრაუზერში უნდა გამოჩნდეს ტექსტი "Hello Georgia" ; )
<?php
class Blog extends CI_Controller {
public function index(){
echo "Hello Georgia";
}
public function framework() {
echo "This is CodeIgniter !";
}
}
?>
ამ კონტროლერის გაშვება შეიძლება სამნაირად
მარტივი ასახსნელია რომ მეორე შემთხვევაშიც იგივე შედეგს ვიხილავთ ბრაუზერში. რაც შეეხება მესამე URL-ს, მასზე შესვლის შემდეგ ბრაუზერში გამოვა ტექსტი "This is CodeIgniter !" , ეს კი არის framework მეთოდის შედეგი, რადგან კონტროლერის დასახელების შემდეგ სწორედ ამ მეთოდის სახელია მითითებული URL-ში.
URL მისამართის მეორე სეგმენტი განსაზღვრავს თუ კონტროლერის რომელი მეთოდის გამოძახება უნდა მოხდეს.
example.com/index.php/products/shoes/sandals/123
მეთოდს უნდა გადაეცეს URI-ის 3 და 4 სეგმენტები (“sandals” და “123”):
<?php
class Products extends CI_Controller {
public function shoes($sandals, $id){
echo $sandals;
echo $id;
}
}
http://www.your-domain.com
ამ შემთხვევისათვის CI-მ წინასწარ უნდა იცოდეს თუ რომელი კონტროლერი ჩატვირთოს ნაგულისმევობის პრინციპით. ამისათვის უნდა გავხსნათ ფაილი
application/config/routes.php და მივუთითოთ
$route['default_controller'] = 'blog';
სადაც 'blog' არის იმ კონტროლერის სახელი, რომელიც გვსურს, რომ ჩაიტვირთოს გვერდზე შესვლისას.
private function _utility(){
// some code
}
ამ მეთოდს ვერ დავუკავშირდებით URL მისამართით
example.com/index.php/blog/_utility/
parent::__construct();
ამ ჩანაწერის გამოყენების მიზეზი არის ის, რომ ჩვენს ლოკალურ კონსტრუქტორში მოხდეს მშობელი კლასის კონსტრუქტორის თავიდან განსაზღვრა
<?php
class Blog extends CI_Controller {
public function __construct(){
parent::__construct();
// Your own constructor code
}
}
კონსტრუქტორების გამოყენება ეფექტურია მაშინ, როდესაც გვინდა რომ ნაგულისმეობის პრინციპით განვსაზღროთ რაიმე მნიშვნელობები ან შევასრულოთ
კონკრეტული ოპერაცია კლასის ეგზემპლიარის შექმნისას. კონსტრუქტორები არ აბრუნებენ შედეგს, მაგრამ შეუძლიათ ქმედების შესრულება ნაგულისმეობის
პრინციპით.
<html>
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my Blog!</h1>
</body>
</html>
$this->load->view('დასახელება');
სადაც "დასახელება" არის საჭირო წარმოდგენის შესაბამისი ფაილის დასახელება რომელიც მოთავსებულია application/views დირექტორიაში,
თუ სხვა დირექტორიაში მოთავსებული ფაილის გამოძახება გვსურს სინტაქსი ასეთია
$this->load->view('დირექტორია/დასახელება');
.php გაფართოების მითითება აუცილებელი არ არის თუ არ ვიყენებთ სხვა რაიმეს გარდა .php-ისა.
ახლა გავხსნათ ჩვენს მიერ შექმნილი Blog.php კონტროლერი და ჩავწეროთ შემდეგი კოდი
<?php
class Blog extends CI_Controller {
public function index(){
$this->load->view('blogview');
}
}
index() მეთოდი იძახებს view() მეთოდს და აწვდის მას არგუმენტად “blogview”-ს რადგან ჩვენ გვჭირდება application/views/blogview.php
წარმოდგენის გამოძახება. თუ ახლა შევალთ შემდეგ მისამართზე
example.com/index.php/blog/
ბრაუზერში ვიხილავთ blogview.php ფაილში აღწერილი კოდის შესაბამის შიგთავსს.
<?php
class Page extends CI_Controller {
public function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
ობიექტის შემთხვევაში
$data = new Someclass();
$this->load->view('blogview', $data);
გავაკეთოთ ეს ჩვენს Blog.php კონტროლერში
<?php
class Blog extends CI_Controller {
public function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
წარმოდგენაში ანუ blogview.php ფაილში კი ამ ინფორმაციის გამოტანა მოხდება ასე
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
<?php
class Blog extends CI_Controller {
public function index()
{
$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
წარმოდგენაში ამ ინფორმაციის გამოყენება მოხდება შემდეგნაირად
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
<h3>My Todo List</h3>
<ul>
<?php foreach ($todo_list as $item):?>
<li><?php echo $item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function get_last_ten_entries() {
$query = $this->db->get('entries', 10);
return $query->result();
}
public function insert_entry() {
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
public function update_entry() {
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
class Model_name extends CI_Model {
public function __construct() {
parent::__construct();
// Your own constructor code
}
}
Model_name არის კლასის დასახელება, რომელიც უნდა იწყებოდეს დიდი ასოთი, კლასი უნდა იყოს CI-ს კლასის CI_Model-ის
მემკვიდრე.
$this->load->model('model_name');
მოდელის ჩატვირთვის შემდეგ შესაძლებელია მისი თვისებების გამოძახება
$this->model_name->method();
კონკრეტული მაგალითი
class Blog_controller extends CI_Controller {
public function blog(){
// ჩავტვირთეთ მოდელი
$this->load->model('blog');
/*
წარმოდგენისათვის გადასაცემ მასივს მივაბით მოდელის ფუნქცია,
მაგალითად ბოლო 10 ჩანაწერის ამოღების ფუნქცია
*/
$data['query'] = $this->blog->get_last_ten_entries();
// ჩავტვირთეთ წარმოდგენა და მივამაგრეთ ინფორმაცია
$this->load->view('blog', $data);
}
}
$autoload['model'] = array();
ამ მასივში მითითებული მოდელები ჩატვირთული იქნება აპლიკაციის ინიციალიზაციიდან მის გამორთვამდე.
CI არ ტვირთავს ავტომატურად დამხმარე ფაილებს, ასე რომ თუ მათი გამოყენება გვინდა პირველ რიგში უნდა ჩავტვირთოთ ისინი. ჩატვირთვის შემდეგ მათზე გვაქვს გლობალური წვდომა კონტროლერებიდან და წარმოდგენებიდან.
დამხმარეები მოთავსებულია system/helpers ან application/helpers საქაღალდეში, CI ჯერ ამოწმებს application/helpers საქაღალდეს. თუ ეს საქაღალდე არ შეიცავს საჭირო დამხმარეს მაშინ მოწმდება system/helpers დირექტორია.
$this->load->helper('name');
სადაც name არის დამხმარე ფუნქციის შესაბამისი ფაილის დასახელება .php გაფართოებისა და "helper" ნაწილის გარეშე. მაგალითად
თუ გვინდა ჩავტვირთოთ URL მისამართების შექმნის დამხმარე ფაილი, რომლის დასახელებაცაა url_helper.php, ვიქცევით ასე
$this->load->helper('url');
დამხმარეს ჩატვირთვა შესაძლებელია ნებისმიერ ადგილას კონტროლერში (ან წარმოდგენაში, თუმცა ეს კარგი პრაქტიკა არ არის), ბუნებრივია ჩატვირთვა უნდა
მოხდეს დამხმარეს გამოყენებამდე. დამხმარე შეიძლება ჩაიტვირთოს კონტროლერის კონსტრუქტორი მეთოდის დახმარებით და ამის შემდეგ მასთან წვდომა
შეგვეძლება კონტროლერის ყველა მეთოდიდან. შესაძლებელია რამოდენიმე დამხმარეს ერთდროულად ჩატვირთვაც
$this->load->helper(array('helper1', 'helper2', 'helper3'));
თუ გვსურს, რომ რომელიმე დამხმარე ავტომატურად ჩაიტვირთოს ამისათვის application/config/autoload.php ფაილში არსებულ შესაბამის მასივში
უნდა შევიტანოთ ამ დამხმარეს დასახელება.
<?php echo anchor('blog/comments', 'Click Here');?>
სადაც “Click Here” არის ბმულის დასახელება, “blog/comments” კი არის კონტროლერის/მეთოდის URL რომელთან დაკავშირებაც გვინდა.
$str = "This is a Codeigniter tutorial";
$array = array_slice(explode(" ",$str),0,4);
echo $new = implode(" ",$array); // This is a Codeigniter
ახლა ვნახოთ თუ როგორ შეიძლება იგივე ამოცანის გადაჭრა ტექსტური დამხმარეს შესაბამისი ფუნქციის მეშვეობით
$str = "This is a Codeigniter tutorial";
echo $new = word_limiter($str, 4); // This is a Codeigniter
$this->load->library('class_name');
სადაც ‘class_name’ არის საჭირო კასის დასახელება, მაგალითად ჩავტვირთოს ფორმის ვალიდაციის კლასი
$this->load->library('form_validation');
შესაძლებელია რამოდენიმე ბიბლიოთეკის ერთდროულად ჩატვირთვაც
$this->load->library(array('email', 'table'));
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Someclass {
public function some_method()
{
}
}
$this->load->library('someclass');
ამის შემდეგ უკვე შესაძლებელია კლასის რომელიმე მეთოდის გამოძახება
$this->someclass->some_method();
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('someclass', $params);
ამის შემდეგ უნდა შევქმნათ კლასის კონსტრუქტორი
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Someclass {
public function __construct($params)
{
// Do something with $params
}
}
N | ბიბლიოთეკის კლასი & აღწერა |
---|---|
2 |
Caching Class This class will cache the pages, to quickly access the page speed. |
3 |
Calendaring Class Using this class, you can dynamically create calendars. |
4 |
Shopping Cart Class Using this class, you can add or remove item from Shopping Cart. The items are saved in session and will remain active until the user is browsing the site. |
5 |
Config Class Configuration preferences can be retrieved, using this class. This class is initialized automatically. |
6 |
Email Class ამ კლასს აქვს ელ_ფოსტასთან დაკავშირებული ფუნქციები, გაგზავნა, პასუხი და ა.შ. |
7 |
Encryption Class This class provides two-way data encryption functionality. |
8 |
File Uploading Class ამ კლასს აქვს ფაილის ატვირთვასტან დაკავშირებული ფუნქციები. |
9 |
Form Validation Class კლასს აქვს ფუნქციები, რომლებიც გამოიყენება ფორმის ვალიდაციისათვის. |
10 |
FTP Class This class provides various FTP related functions like transferring files to remove server, moving, renaming or deleting files on server. |
11 |
Image Manipulation Class სურათებით მანიპულირება ზომის შეცვლა, მინიატურების შექმნა, დაკროპვა, ამობრუნება< და ა.შ |
12 |
Input Class This class pre-processes the input data for security reason. |
13 |
Language Class This class is used for internationalization. |
14 |
Loader Class This class loads elements like View files, Drivers, Helpers, Models etc. |
15 |
Migrations Class This class provides functionalities related to database migrations. |
16 |
Output Class ეს კლასის ბრაუზერს უგზავნის გამოსატან ინფორმაციას და აგრეთვე ახდენს გვერდის კეშირებას. |
17 |
Pagination Class This class adds pagination functionalities to web page. |
18 |
Template Parser Class The Template Parser Class can perform simple text substitution for pseudo-variables contained within your view files. It can parse simple variables or variable tag pairs. |
19 | Security Class This class contains security related functions like XSS Filtering, CSRF etc. |
20 | Session Library ეს კლასი გვეხმარება გამოვიყენოთ სესიები ჩვენს აპლიკაციაში. |
21 | HTML Table ეს კლასი გამოიყენება მასივის ან მბ-დან მიღებული ინფორმაციის საფუძველზე HTML ცხრილის ავტოგენერირებისათვის. |
22 | Trackback Class The Trackback Class provides functions that enable you to send and receive Trackback data. |
23 | Typography Class ამ კლასსის მეთოდები გვეხმარება ტექსტის ფორმატირებაში.. |
24 | Unit Testing Class This class provides functionalities to unit test your application and generate the result. |
25 |
URI Class ამ კლასს აქვს მეთოდები, რომელთა საშუალებითაც შესაძლებელია URI სტრიქონებიდან ინფორმაციის ამოღება. თუ ვიყენებთ URI მარშრუტიზაციას, აგრეთვე შესაძლებელია URI სეგმენტების შესახებ ინფორმაციის მიღებაც. |
26 | User Agent Class ამ კლასის მეშვეობით შეიძლება დავადგინოთ ინფორმაცია ბრაუზერის, მობილური მოწყობილობის, ან ვებ-გვერდზე შემოსული ბოტების შესახებ. |
27 |
XML-RPC and XML-RPC Server Classes CodeIgniter’s XML-RPC classes permit you to send requests to another server, or set up your own XML-RPC server to receive requests. |
28 |
Zip Encoding Class ეს კლასი გამოიყენება მონაცემთა zip არქივების შესაქმნელად. |
your-domain.com/class/function/id/
example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/
ამ მისამართების მეორე სეგმენტებში კლასის მეთოდის ნაცვლად გამოყენებულია ID პარამეტრები. ამ შემთხვევაში საჭიროა მარშრუტიზაციის ახალი წესების
განსაზღვრა.
$route['product/:num'] = 'catalog/product_lookup';
ანუ თუ URL მისამართის პირველ სეგმენტში მოიძებნება სიტყვა "product", ხოლო მეორე სეგმენტში კი რიცხვი, მაშინ ჩაიტვირთება კლასი "catalog" და
მეთოდი "product_lookup".
$route['journals'] = 'blogs';
URL მისამართი რომელიც პირველ სეგმენტში შეიცავს სიტყვას - “journals” გადამისამართდება “blogs” კლასისკენ.
$route['blog/joe'] = 'blogs/users/34';
URL მისამართი რომელიც შეიცავს blog/joe სეგმენტებს გადამისამართდება “blogs” კლასისა და მისი “users” მეთოდისაკენ. ID პარამეტრის მნიშვნელობა კი
იქნება “34”.
$route['products/([a-z]+)/(\d+)'] = '$1/id_$2';
ამ მაგალითის მიხედვით თუ URL მისამართს ექნება დაახლოებით ამგვარი სახე - "products/shoes/123", გამოძახებულ იქნება კლასი “shirts” და
მეთოდი “id_123”.
N | მარშრუტის აღწერა |
---|---|
1 | $route['default_controller'] ეს მარშრუტი განსაზღვრავს თუ რომელი კონტროლერის კლასი უნდა ჩაიტვირთოს იმ შემთხვევაში, როდესაც URI არ შეიცავს იმ კონკრეტულ ინფორმაციას, რომელმაც უნდა განსაზღვროს თუ რა ჩაიტვირთოს ძირითადი URI-ის გახსნისას. რეკომენდებულია გვქონდეს მარშუტი, რპმელიც ნაგულისმეობის პრინციპით ჩატვირთავს რომელიმე კლასს გვედის გახსნისას, წინააღმდეგ შემთხვევაში გაიხსნება 404 გვერდი ანუ ინფორმაცია ვერ მოიძებნება, როგორც წესი აქ უნდა მივუთითოთ პროექტის მთავარი გვერდი რათა ის გაიხსნას გვერდზე შესვლისას. |
2 | $route['404_override'] ეს მარშრუტი განსაზღვრავს თუ რომელი კონტროლერის კლასი უნდა ჩაიტვირთოს თუ მოთხოვნილი კონტროლერი ვერ მოიძებნენა, ამ მარშრუტში განსაზღრული კლასი გადაფარავს 404 შეცდომის შეტყობინების გვერდს. ეს გავლენას არ მოახდენს show_404() ფუნქციის მუშაობაზე, რომელიც გააგრძელებს ნაგულისხმეობის პრინციპით ფაილის ჩატვირთვას application/views/errors/error_404.php. |
3 | $route['translate_uri_dashes'] როგორც ლოგიკური მნიშვნელობიდან ჩანს ეს მარშრუტი არ არის, ეს თვისება საშუალებას გვაძლევს URL-ის სეგმენტებში არსებული ტირეები: "-", ავტომატურად შეიცვალოს ქვედა ტირეებით "_", ამის გაკეთება აუცილებელია რადგან ტირე არ ითვლება კლასის ან მეთოდის სახელში დასაშვებ სიმბოლოდ, და მისი URL-ში მოხვედრა გამოიწვევს Fatal ტიპის შეცდომას. |
<?php echo $variable; ?>
ალტერნატიული სინტაქსი კი ასეთი
<?=$variable?>
<ul>
<?php foreach ($todo as $item): ?>
<li><?=$item?></li>
<?php endforeach; ?>
</ul>
შევნიშნოთ, რომ არ ხდება ფიგურული ფრჩხილების გამოყენება, დამხურავი ფიგურული ფრჩხილი ჩანაცვლებულია endforeach-ით. შესაბამისად
სხვა საკონტროლო სტრუქტურების დამხურავი ელემენტებია endif, endfor, endforeach და endwhile.
აგრეთვე შევნიშნოთ, რომ ჩანაწერების შემდეგ (გარდა ბოლო ჩანაწერისა), წერტილ-მძიმის ნაცვლად გამოყენებულია ორწერტილი.
<?php if ($username === 'sally'): ?>
<h3>Hi Sally</h3>
<?php elseif ($username === 'joe'): ?>
<h3>Hi Joe</h3>
<?php else: ?>
<h3>Hi unknown user</h3>
<?php endif; ?>
სხვა ვითარებაა პროექტის დამზადების პროცესში, ამ შემთხვევაში შეცდომების გამოტანა უფრო კომფორტულს ხდის მუშაობის პროცესს, რადგან დაუყოვნებლივ ხვდებით თუ სად რა შეცდომა გაიპარა.
არ არის სასურველი მომხმარებელს მიეცეს შესაძლებლობა ნახოს ისეთი ფაილები და საქაღალდეები რომლების ნახვაც არ არის საჭირო და აუცილებელი.
ასეთი ფაილების და საქაღალდეების დასამალად შესაძლებელია .htaccess ფაილის გამოყენებაც.
somelibrary.php
someLibrary.php
SOMELIBRARY.php
Some_Library.php
Application_config.php
Application_Config.php
applicationConfig.php
Somelibrary.php
Some_library.php
applicationconfig.php
application_config.php
გარდა ამისა, კლასის ფაილების დასახელებები უნდა დაემთხვეს თავად კლასის დასახელებებს, მაგალითად თუ გვაქვს კლასი "Myclass", მის შესაბამის ფაილს
უნდა დავარქვათ "Myclass.php".
class superclass
class SuperClass
class Super_class
კლასის მეთოდის დასახელება უნდა ჩაიწეროს პატარა ასოებით და ისე უნდა განისაზღროს რომ მკაფიოდ მიუთითებდეს და ასოცირდებოდეს თავად მეთოდის
ფუნქციონალიტეტთან, შინაარსთან. არაა სასურველი მეთოდის სახელი იყოს ძალიან გრძელი და შეიცავდეს ბევრ სიტყვებს. სახელში შემავალი სიტყვები
ერთმანეთისაგან უნდა გამოიყოს ქვედა ტირით.
function fileproperties() // არ აღწერს მეთოდის შინაარს და აკლია სიტყვათა გამომყოფი
function fileProperties() // არ აღწერს მეთოდის შინაარს და ჩაწერილია აქლემისებური სტილით
function getfileproperties() // უკეთესია ! მაგრამ აკლია სიტყვათა გამომყოფი
function getFileProperties() // ჩაწერილია აქლემისებური სტილით
function get_the_file_properties_from_the_file() // სიტყვაგრძელია
/*
აღწერს მეთოდის შინაარს,
მითითებულია გამომყოფი,
ჩაწერილია პატარა ასოებით
*/
function get_file_properties()
$j = 'foo'; // ერთასოიანი დასახელება for() ციკლის გარეთ
$Str // შეიცავს დიდ ასოებს
$bufferedText // იყენებს აქლემისებურ სტილს, შესაძლებელია უფრო მოკლედ ჩაწერაც
$groupid // რამოდენიმე სიტყვა გამყოფის გარეშე
$name_of_last_city_used // გრძელი დასახელება
for ($j = 0; $j < 10; $j++)
$str
$buffer
$group_id
$last_city
/**
* Super Class
*
* @package Package Name
* @subpackage Subpackage
* @category Category
* @author Author Name
* @link http://example.com
*/
class Super_class {
ერთხაზიანი კომენტარების გამოყენებისას სასურველია კომენტარის ბლოკებს შორის დავამატოთ გამოტოვებული ხაზები
// break up the string by newlines
$parts = explode("\n", $str);
// A longer comment that needs to give greater detail on what is
// occurring and why can use multiple single-line comments. Try to
// keep the width reasonable, around 70 characters is the easiest to
// read. Don't hesitate to link to permanent external resources
// that may provide greater detail:
//
// http://example.com/information_about_something/in_particular/
$parts = $this->foo($parts);
myConstant // არ არის ჩაწერილი დიდი ასოებით
N // ჩაწერილია ერთი ასოთი
S_C_VER // არ აღწერს შინაარსს, დანიშნულებას
MY_CONSTANT
NEWLINE
SUPER_CLASS_VERSION
if ($foo == true)
$bar = false;
function foo($bar = null)
if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)
if ($foo || $bar)
if ($foo AND $bar)
if (!$foo)
if (! is_array($foo))
if ($foo OR $bar)
if ($foo && $bar) // recommended
if ( ! $foo)
if ( ! is_array($foo))
// თუ 'foo' გვხვდება სტრიქონის დასაწყისში, strpos დააბრუნებს 0-ს,
// ლოგიკური პირობის მნიშვნელობა შეფასდება როგორც TRUE
if (strpos($str, 'foo') == FALSE)
if (strpos($str, 'foo') === FALSE)
function build_string($str = ""){
if ($str == "") // მაგრამ რა მოხდება თუ FALSE ან 0 გადაიცემა არგუმენტად ?
{
}
}
function build_string($str = ""){
if ($str === "")
{
}
}
$arr[ $foo ] = 'foo';
$arr[$foo] = 'foo'; // მასივის გასაღების ირგვლივ არაა საჭირო ადგილების გამოტოვება
function foo ( $bar ){
}
function foo($bar){
}
foreach( $query->result() as $row )
foreach ($query->result() as $row)
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
$foo = 'this';
$bar = 'that';
$bat = str_replace($foo, $bar, $bag);
"My String" // არ გვაქვს ცვლადი სტრიქონში
"My string $foo" // ცვლადი არ ზის ფიგურულ ბრჩხილებში
'SELECT foo FROM bar WHERE baz = \'bag\''
'My String'
"My string {$foo}"
"SELECT foo FROM bar WHERE baz = 'bag'"
// სიტყვა გასაღებები პატარა ასოებითაა ჩაწერილი
// და მოთხოვნაც გრძელია ერთ ხაზზე ჩასაწერად
$query = $this->db->query("select foo as raboof, foobaz from exp_pre_email_addresses
...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
$query = $this->db->query("SELECT foo AS raboof, foobaz
FROM exp_pre_email_addresses
WHERE foo != 'oof'
AND baz != 'zab'
ORDER BY foobaz
LIMIT 5, 100");
http://example.com/
თუ საბაზისო URL მითითებული არ არის CI შეეცდება გამოიცნოს პროტოკოლი, დომეინი და გზა ჩვენს აპლიკაციამდე, ასეა თუ ისე ეს პარამეტრი
ყოველთვის უნდა განცსაზღვროთ, განსაკუთრებით მაშინ როცა პროექტი უკვე გაშვებულია სამუშაო გარემოში. საბაზისო URL-ის განსაზღვრა
შესაძლებელია $config მასივში base_url გასაღების მეშვეობით
$config['base_url'] = 'http://your-domain.com';
$autoload['libraries'] = array('database', 'email', 'session');
$autoload['helper'] = array('url', 'file');
$autoload['language'] = array('lang1', 'lang2');
$this->load->helper('array');
element($item, $array[, $default = NULL])
$array = array(
'color' => 'red',
'shape' => 'round',
'size' => ''
);
echo element('color', $array); // დაბრუნდება "red"
echo element('size', $array, 'foobar'); // დაბრუნდება "foobar"
$array = array(
'color' => 'red',
'shape' => 'round',
'radius' => '10',
'diameter' => '20'
);
$my_shape = elements(array('color', 'shape', 'height'), $array);
შედეგი იქნება
array(
'color' => 'red',
'shape' => 'round',
'height' => NULL
);
შეგვიძლია მესამე პარამეტრის გადაცემაც
$my_shape = elements(array('color', 'shape', 'height'), $array, 'foobar');
შედეგი
array(
'color' => 'red',
'shape' => 'round',
'height' => 'foobar'
);
elements ფუნქციის გამოყენება ეფექტურია როდესაც რომელიმე მოდელს ინფორმაცია ეგზავნება $_POST მასივით.
$this->load->model('post_model');
$this->post_model->update(
elements(array('id', 'title', 'content'), $_POST)
);
ეს ჩანაწერი არ აძლევს მომხმარებელს საშუალებას გააგზავნოს ისეთი ინფორმაცია რომელიც არ უნდა შევიდეს ცხრილში, ანუ ამ შემთხვევაში
ცხრილში განახლდება მხოლოდ id, title და content ველები.
random_element($array)
$quotes = array(
"თბილისი",
"ქუთაისი",
"მცხეთა",
"ბათუმი",
"ცხინვალი",
"სოხუმი"
);
echo random_element($quotes);
$this->load->helper('email');
if (valid_email('email@somesite.com')){
echo 'email is valid';
}
else{
echo 'email is not valid';
}
send_email($recipient, $subject, $message)
ფუნქცია აბრუნებს TRUE/FALSE მნიშვნელობებს იმისდამიხედვით გაიგზავნა თუ არა ელ_ფოსტა.
$this->load->helper('file');
$string = file_get_contents('./path/to/file.php');
ფაილამდე გზა აღიქმება და უნდა ჩაიწეროს ძირითადი ფაილის index.php-სთან მიმართებაში და არა კონტროლერებთან ან წარმოდგენებთან
მიმართებაში, CI იყენებს index.php ფაილს იყენებს როგორც მთავარ კონტროლერს და ამიტომ ბილიკები (pats) იწერება მასთან მიმართებაში.
delete_files($path[, $del_dir = FALSE[, $htdocs = FALSE]])
$path პარამეტრი განსაზღვრავს თავად საქაღალდეს, $del_dir პარამეტრი არის ლოგიკური ტიპის TRUE/FALSE და განსაზღვრავს წაიშალოს თუ
არა დირექტორიაში არსებული სხვა დირექტორიებიც, $del_dir პარამეტრიც არის ლოგიკური ტიპის TRUE/FALSE და განსაზღვრავს წაიშალოს თუ
არა დირექტორიაში არსებული .htaccess და index page ფაილები. მთლიანობაში ფუნქცია აბრუნებს TRUE/FALSE მნიშვნელობებს წარმატებიდან
გამომდინარე
delete_files('./path/to/directory/');
$file = 'somefile.png';
echo get_file_info($file);
$this->load->helper('form');
form_open([$action = ''[, $attributes = ''[, $hidden = array()]]])
$action პარამეტრი განსაზღვრავს ფორმის action ატრიბუტს, ანუ გვერდს სადაც უნდა გაიგზავნოს ინფორმაცია ფორმიდან, $attributes პარამეტრი
განსაზღვრავს HTML ატრიბუტებს, $hidden ატრიბუტი განსაზღვრავს დამალულ ველებს.
echo form_open('email/send');
ეს ჩანაწერი შექმნის ფორმის გამხსნელ ტეგს და ტოლფასია შემდეგი ჩანაწერისა
<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
$attributes = array('class' => 'email', 'id' => 'myform');
echo form_open('email/send', $attributes);
ამ ჩანაწერის ალტერნატიული ვარიანტი ატრიბუტების სტრიქონის სახით აღწერაა
echo form_open('email/send', 'class="email" id="myform"');
ორივე შემთხვევაში მივიღებთ შედეგს
<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send" class="email" id="myform">
$hidden = array('username' => 'Joe', 'member_id' => '234');
echo form_open('email/send', '', $hidden);
შედეგი იქნება
<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
<input type="hidden" name="username" value="Joe" />
<input type="hidden" name="member_id" value="234" />
form_input([$data = ''[, $value = ''[, $extra = '']]])
$data პარამეტრი განსაზღვრავს ატრიბუტების მასივს, $value პარამეტრი განსაზღვრავს ველის "value" მნიშვნელობას, $extra ატრიბუტი განსაზღვრავს
ექსტრა-ატრიბუტების მასივს. შევქმნათ ტექსტის შესაყვანი სტანდარტული ველი, მას გადავცეთ "name" და "value" ატრიბუტები
echo form_input('username', 'johndoe');
ან შესაძლებელია ატრიბუტების ასოიციაციურ მასივში თავმოყრა და ამ მასივის form_input() ფუნქციის პარამეტრად მითითება
$data = array(
'name' => 'username',
'id' => 'username',
'value' => 'johndoe',
'maxlength' => '100',
'size' => '50',
'style' => 'width:50%'
);
echo form_input($data);
/*
შედეგი:
<input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%" />
*/
თუ გვსურს, რომ ფორმა შეიცავდეს დამატებით ინფორმაციას, მაგალითად Javascript-ს, ეს ინფორმაცია შეგვიძლია გადავცეთ სტრიქონის სახით მესამე
პარამეტრად
$js = 'onClick="some_function()"';
echo form_input('username', 'johndoe', $js);
ან
$js = array('onClick' => 'some_function();');
echo form_input('username', 'johndoe', $js);
form_dropdown([$name = ''[, $options = array()[, $selected = array()[, $extra = '']]]])
პირველი განსაზღვრავს ელემენტის სახელს, მეორე პარამეტრი არის მასივი, რომელშიც შეტანილია <option> ელემენტების დასახელებები და
მნიშვნელობები, მესამე პარამეტრი კი განსაზღვრავს თუ რომელი <option> ელემენტის ამორჩევა უნდა მოხდეს ავტომატურად
$options = array(
'small' => 'Small Shirt',
'med' => 'Medium Shirt',
'large' => 'Large Shirt',
'xlarge' => 'Extra Large Shirt',
);
$shirts_on_sale = array('small', 'large');
echo form_dropdown('shirts', $options, 'large');
/*
შედეგი :
<select name="shirts">
<option value="small">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>
*/
form_checkbox([$data = ''[, $value = ''[, $checked = FALSE[, $extra = '']]]])
$data პარამეტრი განსაზღვრავს ატრიბუტების მასივს, $value ატრიბუტი განსაზღვრავს ელემენტის მნიშვნელობას, $checked ატრიბუტი არის ლოგიკური
ტიპის და განსაზღვრავს ავტომატურად მოინიშნოს თუ არა ღილაკი, $extra ატრიბუტი განსაზღვრავს დამატებით ინფორმაციას
echo form_checkbox('newsletter', 'accept', TRUE);
// შედეგი : <input type="checkbox" name="newsletter" value="accept" checked="checked" />
$data = array(
'name' => 'newsletter',
'id' => 'newsletter',
'value' => 'accept',
'checked' => TRUE,
'style' => 'margin:10px'
);
echo form_checkbox($data);
// შედეგი: <input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" />
თუ გვსურს, რომ ელემენტი შეიცავდეს დამატებით ინფორმაციას, მაგალითად Javascript-ს, ეს ინფორმაცია შეგვიძლია გადავცეთ სტრიქონის
სახით მესამე პარამეტრად
$js = 'onClick="some_function()"';
echo form_checkbox('newsletter', 'accept', TRUE, $js);
შესაძლებელია ამ ინფორმაციის მასივში მოქცევაც
$js = array('onClick' => 'some_function();');
echo form_checkbox('newsletter', 'accept', TRUE, $js);
form_label([$label_text = ''[, $id = ''[, $attributes = array()]]])
$label_text პარამეტრი განსაზღვრავს ელემენტის ტექსტს, $id პარამეტრი განსაზღვრავს თუ რომელი ელემენტისათვის ვქმნით <label> ელემენტს,
$attributes პარამეტრი განსაზღვრავს HTML ატრიბუტებს.
echo form_label('What is your Name', 'username');
// შედეგი : <label for="username">What is your Name</label>
$attributes = array(
'class' => 'mycustomclass',
'style' => 'color: #000;'
);
echo form_label('What is your Name', 'username', $attributes);
// შედეგი : <abel for="username" class="mycustomclass" style="color: #000;">What is your Name</label>
form_submit([$data = ''[, $value = ''[, $extra = '']]])
$data პარამეტრი განსაზღვრავს ღილაკის სახელს, $value პარამეტრი მის ტექსტს, $extra პარამეტრი დამატებით ინფორმაციას.
echo form_submit('mysubmit', 'Submit Post!');
// შედეგი : <input type="submit" name="mysubmit" value="Submit Post!" />
დამატებითი ინფორმაციის, მაგალითად JavaScript-ის მიბმის მაგალითები უკვე ვნახეთ.
form_button([$data = ''[, $content = ''[, $extra = '']]])
$data პარამეტრი განსაზღვრავს ღილაკის სახელს, $value პარამეტრი მის ტექსტს, $extra პარამეტრი დამატებით ინფორმაციას.
echo form_button('name','content');
// შედეგი : <button name="name" type="button">Content</button>
$data = array(
'name' => 'button',
'id' => 'button',
'value' => 'true',
'type' => 'reset',
'content' => 'Reset'
);
echo form_button($data);
// შედეგი : <button name="button" id="button" value="true" type="reset">Reset</button>
დამატებითი ინფორმაციის, მაგალითად JavaScript-ის მიბმის მაგალითები უკვე ვნახეთ.
form_close([$extra = ''])
$extra პარამეტრად შეგვიძლია მივუთითოთ იმ ელემენტების კოდი, რომელიც გვინდა რომ ფორმის შემდეგ შეიქმნას.
$string = '</div></div>';
echo form_close($string);
// შედეგი : </form> </div></div>
$this->load->helper('html');
heading([$data = ''[, $h = '1'[, $attributes = '']]])
$data პარამეტრი განსაზღვრავს სათაურის ტექსტს, $h პარამეტრი განსაზღვრავს თუ რა ზომის უნდა იყოს სათაური (1-6), $attributes განსაზღვრავს
HTML ატრიბუტებს.
echo heading('Welcome!', 3, 'class="pink"');
echo heading('How are you?', 4, array('id' => 'question', 'class' => 'green'));
შედეგი
<h3 class="pink">Welcome!<h3>
<h4 id="question" class="green">How are you?</h4>
img([$src = ''[, $index_page = FALSE[, $attributes = '']]])
$src ატრიბუტი განსაზღვრავს სურათის წყაროს, $attributes ატრიბუტი განსაზღვრავს HTML ატრიბუტებს
echo img('images/picture.jpg'); // შედეგი : <img src="http://site.com/images/picture.jpg" />
$image_properties = array(
'src' => 'images/picture.jpg',
'alt' => 'alt text',
'class' => 'post_images',
'width' => '200',
'height'=> '200',
'title' => 'title text',
'rel' => 'lightbox'
);
img($image_properties);
// შედეგი :<img src="http://site.com/index.php/images/picture.jpg" alt="alt text" class="post_images" width="200" height="200" title="title text" rel="lightbox" />
ul($list[, $attributes = ''])
$list = array(
'red',
'blue',
'green',
'yellow'
);
$attributes = array(
'class' => 'boldlist',
'id' => 'mylist'
);
echo ul($list, $attributes);
შედეგი იქნება
<ul class="boldlist" id="mylist">
<li>red</li>
<li>blue</li>
<li>green</li>
<li>yellow</li>
</ul>
ანალოგიურად მუშაობს ol() ფუნქციაც.
meta([$name = ''[, $content = ''[, $type = 'name'[, $newline = "n"]]]])
echo meta('description', 'My Great site');
// შედეგი : <meta name="description" content="My Great Site" />
echo meta('Content-type', 'text/html; charset=utf-8', 'equiv');
// Note the third parameter. Can be "equiv" or "name"
// შედეგი : <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
echo meta(array('name' => 'robots', 'content' => 'no-cache'));
// შედეგი : <meta name="robots" content="no-cache" />
$meta = array(
array(
'name' => 'robots',
'content' => 'no-cache'
),
array(
'name' => 'description',
'content' => 'My Great Site'
),
array(
'name' => 'keywords',
'content' => 'love, passion, intrigue, deception'
),
array(
'name' => 'robots',
'content' => 'no-cache'
),
array(
'name' => 'Content-type',
'content' => 'text/html; charset=utf-8', 'type' => 'equiv'
)
);
echo meta($meta);
// შედეგი :
// <meta name="robots" content="no-cache" />
// <meta name="description" content="My Great Site" />
// <meta name="keywords" content="love, passion, intrigue, deception" />
// <meta name="robots" content="no-cache" />
// <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
br([$count = 1])
$count პარამეტრი განსაზღვრავს თუ რამდენი ცალი <br /> ელემენტი უნდა შეიქმნას
echo br(3); // <br /><br /><br />
ანალოგიურად მუშაობს nbs() ფუნქციაც.
$this->load->helper('url');
anchor($uri = '', $title = '', $attributes = '')
$uri პარამეტრი განსაზღვრავს ბმულის URL მისამართს, $title ატრიბუტი განსაზღვრავს ბმულის "title" ატრიბუტს, $attributes განსაზღვრავს დამატებით
ატრიბუტებს.
echo anchor('news/local/123', 'My News', 'title="News title"');
// Prints: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a>
echo anchor('news/local/123', 'My News', array('title' => 'The best news!'));
// Prints: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a>
echo anchor('', 'Click here');
// Prints: <a href="http://example.com">Click Here</a>
echo site_url('news/local/123');
// დაბრუნდება დაახლოებით შემდეგნაირი URL: http://example.com/index.php/news/local/123
მასივის სახით სეგმენტთა გადაცემა შესაძლებელია შემდეგნაირად
$segments = array('news', 'local', '123');
echo site_url($segments);
$title = "What's wrong with CSS?";
$url_title = url_title($title);
// შედეგი: Whats-wrong-with-CSS
ფუნქციას შეიძლება გადეცეს მეორე პარამეტრიც, რომელიც განსაზღვრავს სიტყვათა გამყოფს, ნაგულისმეობის პრინციპით ეს გამყოფი არის ტირე.
გამყოფის დასაშვები მნიშვნელობები კი არის ტირე და ქვედა ტირე, თუ ქვედა ტირის მითითება გვსურს ვიქცევით ასე
$title = "What's wrong with CSS?";
$url_title = url_title($title, 'underscore');
// შედეგი: Whats_wrong_with_CSS
შესაძლებელია მესამე პარამეტრის გადაცემაც, რომელიც განსაზღვრავს გამოყენებულ იქნას თუ არა დიდი ასოები URL მისამართში. ნაგულისმეობის
პრინციპით დიდი ასოები არ გამოიყენება. ამ პარამეტრმა შეიძლება მიიღოს TRUE/FALSE მნიშვნელობები.
$title = "What's wrong with CSS?";
$url_title = url_title($title, 'underscore', TRUE);
// შედეგი: whats_wrong_with_css
if ($logged_in == FALSE)
{
redirect('/login/form/');
}
// with 301 redirect
redirect('/article/13', 'location', 301);
$this->load->helper('text');
$string = "Here is a nice text string consisting of eleven words.";
$string = word_limiter($string, 4);
// დაბრუნდება : Here is a nice
$string = "Here is a nice text string consisting of eleven words.";
$string = character_limiter($string, 20);
// შედეგი : Here is a nice text string
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<input type="file" name="userfile" size="20" />
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<h3>Your file was successfully uploaded!</h3>
<ul>
<?php foreach ($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>
<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>
</body>
</html>
<?php
class Upload extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
public function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile'))
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
?>
xample.com/index.php/upload/
<html>
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
<html>
<head>
<title>My Form</title>
</head>
<body>
<h3>Your form was successfully submitted!</h3>
<p><?php echo anchor('form', 'Try it again!'); ?></p>
</body>
</html>
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
example.com/index.php/form/
მაგრამ ვალიდაცია ჯერ არ დასრულებულა, თუ ახლა ფორმას გავაგზავნით გვერდი უბრალოდ დარეფრეშდება, რადგანაც ჯერ არ მიგვითითებია ვალიდაციის
წესები, წესების განსაზღვრის გარეშე კი ვალიდაციის კლასი ყოველთვის დაავრუნებს FALSE მნიშვნელობას, run() მეთოდი TRUE მნიშვნელობას აბრუნებს
მხოლოდ მაშინ, თუ ვალიდაციის კანონების გათვალისწინების შემდეგ არ დაფიქსირდება არანაირი შეცდომა.
გავაკეთოთ რამოდენიმე შენიშვნა ზემოთ აღწერილი ფაილების შესახებ, myform.php ფაილში აღწერილი ფორმა არის ჩვეულებრივი ვებ-ფორმა რამოდენიმე თავისებურებით
<?php echo validation_errors(); ?>
ეს ფუნქცია დააბრუნებს შეტყობინებას ვალიდაციისას დაფიქსირებული შეცდომის შესახებ, ხოლო თუ შეცდომა არ მოხდება მაშინ დააბრუნებს ცარიელ
სტრიქონს.
$this->form_validation->set_rules();
ამ მეთოდ უნდა გადაეცეს სამი პარამეტრი
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
ჩავამატოთ ეს კოდი კონტროლერში, ვალიდაციის ინიციალიზაციის შემდეგ
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required',
array('required' => 'You must provide a %s.')
);
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
თუ ახლა გავაგზავნით ფორმას უკვე შედეგსაც ვიხილავთ, ცარიელი ველების გაგზავნისას ვიხილავთ შესაბამისი შეცდომების შეტყობინებას, ხოლო თუ ველებს
შევავსებთ - წარმატების გვერდს. თუმცა ერთი ხარვეზი კიდევ ფიქსირდება: შეცდომის დაფიქსირებისას ფორმა აღარ ივსება ავტომატურად, ანუ თუ შევიყბანეთ
სამი ველის მნიშვნელობა და არ შევიყვანეთ მეოთხესი, შეცდომის შეტყობინება კი გამოდის მაგრამ სწორად შეყვანილი ინფორმაციაც იკარგება. ამ პრობლემას
ქვემოთ მოვაგვარებთ.
$config = array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'passconf',
'label' => 'Password Confirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
);
$this->form_validation->set_rules($config);
$this->form_validation->set_rules(
'username', 'Username',
'required|min_length[5]|max_length[12]|is_unique[users.username]',
array(
'required' => 'You have not provided %s.',
'is_unique' => 'This %s already exists.'
)
);
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|is_unique[users.email]');
ეს კოდი განსაზღვრავს შემდეგ კანონებს
$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'trim|required|matches[password]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email');
მოყვანილ მაგალითში ხდება მონაცემთა "გადამზადება", მოწმდება სიგრძეები სადაც ეს საჭიროა და აგრეთვე მოწმდება ემთხვევა თუ არა პაროლები.
ნებისმიერი PHP-ის ფუნქცია, რომელსაც გადაეცემა ერთი პარამეტრი, შესაძლებელია გამოყენებულ იქნას როგორც ვალიდაციის წესი. მაგალითად
"htmlspecialchars()", "trim()" და ა.შ
<html>
<head>
<title>My Form</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Username</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
<h5>Password</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />
<h5>Password Confirm</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />
<h5>Email Address</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
თუ ფორმის ველების დასახელებები მოქცეული გვაქვს მასივში, მაშინ set_value() ფუნქცია უნდა გამოვიყენოთ ასე
<input type="text" name="colors[]" value="" size="50" />
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
ახლა კი უნდა აღვწეროთ username_check() ფუნქცია, რომელიც მოახდენს სახელის უნიკალურობის გადამოწმებას
<?php
class Form extends CI_Controller {
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
public function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"');
return FALSE;
}
else
{
return TRUE;
}
}
}
ამის შემდეგ თუ ფორმას დავარესტარტებთ და მომხმარებლის სახელად შევივანთ სიტყვას - “test”, ვიხილავთ username_check() ფუნქციის
მუშაობის შედეგს.
ვალიდაციის კანონში ფუნქციის მითითება უნდა მოხდეს “callback_” წინსართთან ერთად.
წესი | პარამეტრი | აღწერა | მაგალითი |
---|---|---|---|
required | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტი ცარიელია. | |
matches | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ ემთხვევა პარამეტრად გადაცემულ მნიშვნელობას. | matches[form_item] |
regex_match | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ ემთხვევა რეგულარულ გამოსახულებას. | regex_match[/regex/] |
differs | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ განსხვავდება პარამეტრად გადაცემული მნიშვნელობისაგან. | differs[form_item] |
is_unique | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ არის უნიკალური პარამეტყრად მითითებული ცხრილის ველის მნიშვნელობებს შორის. შენიშვნა: ამ წესის გამოსაყენებლად აუცილებელია ვიყენებდეთ Query Builder-ს. | is_unique[table.field] |
min_length | დიახ | აბრუნებს FALSE-ს ფორმის ელემენტის მნიშვნელობის სიგრძე ნაკლებია მითითებულ პარამეტრზე. | min_length[3] |
max_length | დიახ | აბრუნებს FALSE-ს ფორმის ელემენტის მნიშვნელობის სიგრძე მეტია მითითებულ პარამეტრზე. | max_length[12] |
exact_length | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობის სიგრძე არ ემთხვევა მითითებულ პარამეტრს. | exact_length[8] |
greater_than | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა ნაკლებია ან ტოლი პარამეტრზე, ან საერთოდ არ არის რიცხვითი ტიპის. | greater_than[8] |
greater_than_equal_to | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა ნაკლებია პარამეტრზე, ან საერთოდ არ არის რიცხვითი ტიპის. | greater_than_equal_to[8] |
less_than | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა მეტია ან ტოლი პარამეტრზე, ან საერთოდ არ არის რიცხვითი ტიპის. | less_than[8] |
less_than_equal_to | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა მეტია პარამეტრზე, ან საერთოდ არ არის რიცხვითი ტიპის. | less_than_equal_to[8] |
in_list | დიახ | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ არის წინასწარ განსაზღვრულ სიაში. | in_list[red,blue,green] |
alpha | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ასოებისა. | |
alpha_numeric | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ასოებისა და ციფრებისა. | |
alpha_numeric_spaces | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ასოებისა, ციფრებისა და გამოტოვებული ადგილებისა. | |
alpha_dash | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ასოებისა, ციფრებისა, ტირეებისა და ქვედა ტირეებისა. | |
numeric | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ციფრებისა. | |
integer | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა მთელი რიცხვებისა. | |
decimal | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ათწილადი რიცხვებისა. | |
is_natural | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ნატურალური რიცხვებისა. | |
is_natural_no_zero | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა შეიცავს რაიმეს გარდა ნატურალური რიცხვებისა, არ უნდა უდრიდეს 0-ს. | |
valid_url | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ შეიცავს კორექტულ URL მისამართს. | |
valid_email | არა | აბრუნებს FALSE-ს თუ ფორმის ელემენტის მნიშვნელობა არ შეიცავს ელ_ფოსტის კორექტულ მისამართს. | |
valid_emails | არა | აბრუნებს FALSE-ს თუ მძიმით გამოყოფილი მნიშვნელობებიდან ერთი მაინც არ შეიცავს ელ_ფოსტის კორექტულ მისამართს. | |
valid_ip | დიახ | აბრუნებს FALSE-ს თუ მითითებული IP მისამართი არ არის კორექტული. |
$something = isset($_POST['something']) ? $_POST['something'] : NULL;
CI-ში კი იგივე მოხდება შემდეგნაირად
$something = $this->input->post('something');
ანუ post() მეთოდი ამოწმებს არსებობს თუ არა POST გლობალურ ცვლადში ინფორმაცია, თუ არსებობს აბრუნებს მას თუ არადა აბრუნებს NULL-ს.
input კლასის ძირითადი მეთოდებია
$this->input->post('some_data');
პირველი პარამეტრი უნდა შეიცავდეს POST მასივის იმ გასაღებს რომლის მნიშვნელობასაც ვეძებთ, ბრუნდება NULL თუ ეს მნიშვნელობა განსაზღვრული არ არის.
POST მასივში მოთავსებული ყველა მნიშვნელობის დასაბრუნებლად post() მეთოდი უნდა გამოვიძახოთ პარამეტრების გარეშე
$this->input->post(NULL, TRUE); // XSS ფილტრით
$this->input->post(NULL, FALSE); // XSS ფილტრის გარეშე
კონკრეტული მნიშვნელობების დასავრუნებლად მეთოდს პარამეტრებად უნდა გადავცეთ ფორმის შესაბამისი ველების დასახელებები
$this->input->post(array('field1', 'field2'));
$this->input->server('some_data');
თუ რამოდენიმე მნიშვნელობის ამორება გვურს $_SERVER გლობალური მასივიდან ვიქცევით ასე
$this->input->server(array('SERVER_PROTOCOL', 'REQUEST_URI'));
echo $this->input->ip_address();
if ( ! $this->input->valid_ip($ip))
{
echo 'Not Valid';
}
else
{
echo 'Valid';
}
« პირველი < 1 2 3 4 5 > ბოლო »
მოვიყვანოთ მაგალითი თუ როგორ უნდა გაკეთდეს პაგინაცია კონტროლერის მეთოდის მეშვეობით
$this->load->library('pagination');
$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = 200;
$config['per_page'] = 20;
$this->pagination->initialize($config);
echo $this->pagination->create_links();
http://example.com/index.php/test/page/20
თუ $config['enable_query_strings']-ს განვუსაზღვრავთ მნიშვნელობას - TRUE, მაშინ შესაძლებელი იქნება ასეთი URI მისამართების გამოყენებაც
http://example.com/index.php?c=test&m=page&per_page=20
// შედეგი: class="myclass"
$config['attributes'] = array('class' => 'myclass');
$this->load->library('session');
იმის გამო, რომ კლასის ინიციალიზაცია ხდება CI-ს საბაზისო კონტროლერის მიხედვით, კონტროლერის კონსტრუქტორში ბიბლიოთეკის ჩატვირთვამდე
უნდა გამოვიყენოთ parent::__construct() ჩანაწერი. ამის შემდეგ სესიების გამოყენება მოხდება ასე
$this->session
$_SESSION['item']
ან მაგიური გეტერის მეშვეობით
$this->session->item
ან userdata() მეთოდის მეშვეობით
$this->session->userdata('item');
სადაც "item" არის საძიებელი ინფორმაციის შესაბამისი გასაღები $_SESSION მასივში, მაგალითად გვსურს დავაბრუნოთ "name" გასარების მნიშვნელობა და
შევინახოთ ცვლადში $name
$name = $_SESSION['name'];
// ან:
$name = $this->session->name
// ან:
$name = $this->session->userdata('name');
userdata() მეთოდი აბრუნებს NULL-ს თუ შესაბამისი გასარების მნიშვნელობა არ არის განსაზღვრული.
$this->session->set_userdata($array);
სადაც $array არის მასივი რომელიც შეიცავს სესიაში დასამატებელ ინფორმაციას
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
იმის გადასამოწმებლად უკვე ხომ არ არსებობს სესიაში ესა თუ ის მნიშვნელობა, უნდა გამოვიყენოთ isset() ფუნქცია
// დააბრუნებს FALSE-ს თუ სესია არ შეიცავს 'some_name' მნიშვნელობას ან ეს მნიშვნელობა უდრის NULL-ს,
// TRUE სხვა შემთხვევაში:
isset($_SESSION['some_name'])
ალტერნატიული ვარიანტია has_userdata() მეთოდის გამოყენება
$this->session->has_userdata('some_name');
unset($_SESSION['some_name']);
// ან რამოდენიმე მნიშვნელობა ერთად :
unset(
$_SESSION['some_name'],
$_SESSION['another_name']
);
ალტერნატიული ვარიანტია unset_userdata() მეთოდის გამოყენება
$this->session->unset_userdata('some_name');
რამოდენიმე მნიშვნელობის ერთდროულად წასაშლელად, მეთოდს უნდა გადავცეთ მასივი
$array_items = array('username', 'email');
$this->session->unset_userdata($array_items);
$this->session->mark_as_flash('item');
ან რამდენიმე ჩანაწერის ერთდროულად მონიშვნა
$this->session->mark_as_flash(array('item', 'item2'));
მონიშვნის შემდეგ კი ეს ინფორმაცია უნდა გადეცეს სესიას
$this->session->set_flashdata('item', 'value');
"Flashdata"-ში მოქცეული ინფორმაციის წაკითხვა ხდება ისევე როგორც სესიაში მოქცეული სხვა ინფორმაციისა
$_SESSION['item']
თუმცა შესაძლებელია ამ ინფორმაციის ასე წაკითხვაც
$this->session->flashdata('item');
მაგალითისათვის მოვიყვანოთ ასეთი შემთხვევა: ვთქვათ დარეგისტრირდა ახალი მომხმარებელი, რეგისტრაციის შემდეგ კი ხდება მთავარ გვერდზე გადამისამართება (redirect) და გვსურს, რომ ამ გვერდზე მომხმარებელმა იხილოს შეტყობინება "თქვენ წარმატებით დარეგისტრირდით". კონტროლერის
იმ ნაწილს, რომელიც გადამისამარტებას ახდენს ექნება შემდეგი სახე
...
// შეტყობინების განსაზღვრა
$this->session->set_flashdata('user_registered','თქვენ წარმატებით დარეგისტრირდით');
redirect('index');
set_flashdata ფუნქციას პირველ პარამეტრად გადავეცით "flashdata" ინფორმაციის დასახელება, მეორე პარამეტრად კი შესაბამისი ტექსტი.
ახლა გამოვიყენოთ ეს შეტყობინება index გვერდზე
<?php if($this->session->flashdata('user_registered')) : ?>
<p class="alert alert-success">session->flashdata('user_registered'); ?></p>
<?php endif; ?>
// 'item' წაიშლება 300 წამის შემდეგ
$this->session->mark_as_temp('item', 300);
მოვნიშნოთ რამოდენიმე ინფორმაცია ერთდროულად
// 'item' და 'item2' წაიშლება 300 წამში
$this->session->mark_as_temp(array('item', 'item2'), 300);
// 'item' წაიშლება 300 წამში, 'item2'
// კი წაიშლება 240 წამში
$this->session->mark_as_temp(array(
'item' => 300,
'item2' => 240
));
მონიშვნის შემდეგ შესაძლებელია დავამატოთ ინფორმაცია სესიაში
$this->session->set_tempdata('item', 'value', 300);
ამ ინფორმაციის წაკითხვა კი ხდება შემდეგნაირად
$this->session->tempdata('item');
session_destroy();
// ან
$this->session->sess_destroy();
$this->load->database();
$query = $this->db->query('SELECT name, title, email FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->email;
}
echo 'Total Results: ' . $query->num_rows();
result() ფუნქცია დააბრუნებს ობიექტების მასივს. მაგ: $row->title.
$query = $this->db->query('SELECT name, title, email FROM my_table');
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['email'];
}
result() ფუნქცია დააბრუნებს მასივს სტანდარტული ინდექსებით. მაგ: $row[‘title’].
$query = $this->db->query('SELECT name FROM my_table LIMIT 1');
$row = $query->row();
echo $row->name;
row() ფუნქცია დააბრუნებს ობიექტს. მაგ: $row->name.
$query = $this->db->query('SELECT name FROM my_table LIMIT 1');
$row = $query->row_array();
echo $row['name'];
row_array() ფუნქცია დააბრუნებს მასივს. მაგ: $row[‘name’].
$sql = "INSERT INTO mytable (title) VALUES (".$this->db->escape($title).")";
$this->db->query($sql);
echo $this->db->affected_rows();
$query = $this->db->get('table_name');
foreach ($query->result() as $row)
{
echo $row->title;
}
get() ფუნქცია ამოიღებს ყველა ჩანაწერს მითითებული ცხრილიდან.
$data = array(
'title' => $title,
'name' => $name,
'date' => $date
);
$this->db->insert('mytable', $data); // შედეგი : INSERT INTO mytable (title, name, date) VALUES ('{$title}', '{$name}', '{$date}')
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
მასივის ელემენტები შეგვიძლია დავტოვოთ უცვლელად გარდა შემდეგი ელემენტებისა : hostname, username, password, database და dbdriver.
// PDO
$db['default']['dsn'] = 'pgsql:host=localhost;port=5432;dbname=database_name';
თუ გვსურს სხვადასხვა სამუშაო გარემოსათვის სხვადასხვა ბაზებთან დაკავშირება მაშინ ზემოთ მოყვანილი მასივის $db['default'] გასაღები უნდა
შევცვალოთ, და განვსაზღვროთ მბ-ს სხვა კონფიგურაციული პარამეტრები, ამ გასაღებს მივანიჭოთ მაგალითად "test" მნიშვნელობა და აღვწეროთ პარამეტრები
ისე რომ არ შევეხოთ ძირითად კონფიგურაციას.
$db['test'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
შემდეგ კი სისტემას მივაწოდოთ ინფორმაცია, თუ რომელი ბაზის ჩატვირთვა გვსურს
$active_group = 'test';
$query_builder = TRUE;
$autoload['libraries'] = array(‘database’);
$this->load->database();
ამ ჩანაწერში არანაირი არგუმენტის მითითება არ ხდება რადგან ყველაფერი მითითებულია application/config/database.php ფაილში.
ადრე ვთქვით რომ შესაძლებელია მბ კონფიგურაციის სხვადასხვა ჯგუფების შექმნა სხვადასხვა სამუშაო გარემოებისათვის, ამ ჯგუფების ამორჩევა ხდება შემდეგნაირად.
$this->load->database('group_name');
სადაც "group_name" არის ჯგუფის სახელი (მაგალითად ჩვენ რომ გავაკეთეთ "test" ჯგუფი).
$this->db->close();
$this->db->query('YOUR QUERY HERE');
query() ფუნქცია აბრუნებს მოთხოვნის პასუხის ობიექტს იმ შემთხვევაში თუ მოთხოვნა წაკითხვის ტიპისაა, ამ შედეგის
გამოტანაზე ქვემოთ ვისაუბრებთ, როცა ჩაწერის ტიპის მოთხოვნა სრულდება, ფუნქცია აბრუნებს TRUE ან FALSE მნიშვნელობებს
წარმატებიდან გამომდინარე, როდესაც შედეგის მიღება, დაჭერა გვსურს ის უნდა მოვათავსოთ ჩვენს საკუთარ ცვლადში
$query = $this->db->query('YOUR QUERY HERE');
if ($this->db->simple_query('YOUR QUERY')){
echo "Success!";
}
else{
echo "Query failed!";
}
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%" .
$this->db->escape_like_str($search)."%' ESCAPE '!'";
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
ეს კითხვის ნიშნები ავტომატურად შეიცვლება query ფუნქციის მეორე პარამეტრად მითითებული მასივის ელემენტებით. მაკავშირებლები გამოიყენება
IN ოპერატორთან მუშაობისასაც
$sql = "SELECT * FROM some_table WHERE id IN ? AND status = ? AND author = ?";
$this->db->query($sql, array(array(3, 6), 'live', 'Rick'));
ეს მოთხოვნა დაგენერირდება ასე
SELECT * FROM some_table WHERE id IN (3,6) AND status = 'live' AND author = 'Rick'
if ( ! $this->db->simple_query('SELECT `example_field` FROM `example_table`')){
$error = $this->db->error(); // აქვს გასაღებები 'code' და 'message'
}
$query = $this->db->query("YOUR QUERY");
foreach ($query->result() as $row){
echo $row->title;
echo $row->name;
echo $row->body;
}
$query = $this->db->query("YOUR QUERY");
foreach ($query->result_array() as $row){
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
$query = $this->db->query("YOUR QUERY");
$row = $query->row();
if (isset($row)){
echo $row->title;
echo $row->name;
echo $row->body;
}
თუ კონკრეტული ჩანაწერის ამოღება გვსურს შედეგთა ჯგუფიდან მაშინ row() მეთოდს პარამეტრად უნდა მივუთითოთ ამ ჩანაწერის ნომერი
$row = $query->row(5);
$query = $this->db->query("YOUR QUERY");
$row = $query->row_array();
if (isset($row)){
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
თუ კონკრეტული ჩანაწერის ამოღება გვსურს შედეგთა ჯგუფიდან მაშინ row() მეთოდს პარამეტრად უნდა მივუთითოთ ამ ჩანაწერის ნომერი
$row = $query->row_array(5);
შედეგთა ჯგუფში ნავიგაციისათვის ანუ მოძრაობისათვის გამოიყენება შემდეგი ვარიანტები
$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()
ნაგულისმეობის პრინციპით ეს მეთოდები აბრუნებენ ობიექტებს, თუ გვსურს რომ დააბრუნონ მასივები მაშინ პარამეტრად უნდა მივუთითოთ სიტყვა
“array”
$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_fields();
$str = $this->db->last_query(); // Produces: SELECT * FROM sometable....
echo $this->db->count_all('my_table'); // მაგ: 25
echo $this->db->platform();
echo $this->db->version();
$data = array('name' => $name, 'email' => $email, 'url' => $url);
$str = $this->db->insert_string('table_name', $data);
პირველი პარამეტრი არის ცხრილის სახელი მეორე კი ასოციაციური მასივი სადაც შეტანილია ველთა დასახელებები გასაღებების სახით და შესატანი მონაცემები
ამ გასაღებთა მნიშვნელობების სახით.
ზემოთ მოყვანილი კოდი იმუშავებს ასე
INSERT INTO table_name (name, email, url) VALUES ('Rick', 'rick@example.com', 'example.com')
$data = array('name' => $name, 'email' => $email, 'url' => $url);
$where = "author_id = 1 AND status = 'active'";
$str = $this->db->update_string('table_name', $data, $where);
პირველი პარამეტრი არის ცხრილის სახელი მეორე კი ასოციაციური მასივი სადაც შეტანილია ველთა დასახელებები გასაღებების სახით და შესატანი მონაცემები
ამ გასაღებთა მნიშვნელობების სახით. მოყვანილი კოდი იმუშავებს ასე
INSERT INTO table_name (name, email, url) VALUES ('Rick', 'rick@example.com', 'example.com')
პირველი პარამეტრი არის ცხრილის სახელი მეორე კი ასოციაციური მასივი სადაც შეტანილია ველთა დასახელებები გასაღებების სახით და შესატანი გასანახლებელი
ამ გასაღებთა მნიშვნელობების სახით, მესამე პარამეტრი კი განსაზღვრავს “where” წინადადებას მოყვანილი კოდი იმუშავებს ასე
UPDATE table_name SET name = 'Rick', email = 'rick@example.com', url = 'example.com' WHERE author_id = 1 AND status = 'active'
$query = $this->db->get('mytable'); // იგივეა რაც: SELECT * FROM mytable
შეგვიძლია მივუთითოთ მეორე და მესამე პარამეტრები limit და offset წინადადებებისათვის
$query = $this->db->get('mytable', 10, 20);
// შესრულდება: SELECT * FROM mytable LIMIT 20, 10
შევნიშნოთ რომ ფუნქცია მოთავსებულია $query ცვლადში, რომელიც გამოიყენება შედეგის სანახავად
$query = $this->db->get('mytable');
foreach ($query->result() as $row){
echo $row->title;
}
$sql = $this->db->get_compiled_select('mytable');
echo $sql; // დაბეჭდავს: SELECT * FROM mytable
$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);
$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// შესრულდება: SELECT title, content, date FROM mytable
$this->db->select_max('age');
$query = $this->db->get('members'); // შესრულდება: SELECT MAX(age) as age FROM members
$this->db->select_max('age', 'member_age');
$query = $this->db->get('members'); // შესრულდება: SELECT MAX(age) as member_age FROM members
მისი ანალოგიური მეთოდია $this->db->select_min()
$this->db->select_avg('age');
$query = $this->db->get('members'); // შესრულდება: SELECT AVG(age) as age FROM members
$this->db->select_sum('age');
$query = $this->db->get('members'); // შესრულდება: SELECT SUM(age) as age FROM members
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
// შესრულდება:
// SELECT * FROM blogs JOIN comments ON comments.id = blogs.id
$this->db->where('name', $name); // Produces: WHERE name = 'Joe'
თუ გამოვიყენებთ ამ მეთოდის რამოდენიმე ჩანაწერს, მათში შეტანილი პარამეტრები გაერთიანდება AND ოპერატორის მიერ
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
$this->db->where('name !=', $name);
$this->db->where('id <', $id); // Produces: WHERE name != 'Joe' AND id < 45
$array = array('name' => $name, 'title' => $title, 'status' => $status);
$this->db->where($array);
// Produces: WHERE name = 'Joe' AND title = 'boss' AND status = 'active'
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
$this->db->where('name !=', $name);
$this->db->or_where('id >', $id); // Produces: WHERE name != 'Joe' OR id > 50
$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')
$names = array('Frank', 'Todd', 'James');
$this->db->or_where_in('username', $names);
// Produces: OR username IN ('Frank', 'Todd', 'James')
$names = array('Frank', 'Todd', 'James');
$this->db->where_not_in('username', $names);
// Produces: WHERE username NOT IN ('Frank', 'Todd', 'James')
$this->db->like('title', 'match');
// Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
$this->db->like('title', 'match'); $this->db->or_like('body', $match);
// WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
$this->db->not_like('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
$this->db->group_by("title"); // Produces: GROUP BY title
$this->db->distinct();
$this->db->get('table'); // Produces: SELECT DISTINCT * FROM table
$this->db->order_by('title', 'DESC'); // Produces: ORDER BY `title` DESC
this->db->limit(10); // Produces: LIMIT 10
$data = array(
'title' => 'My title',
'name' => 'My Name',
'date' => 'My date'
);
$this->db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
პირველი პარამეტრი არის ცხრილის სახელი, მეორე კი- მასივი
/*
class Myclass {
public $title = 'My Title';
public $content = 'My Content';
public $date = 'My Date';
}
*/
$object = new Myclass;
$this->db->insert('mytable', $object);
// Produces: INSERT INTO mytable (title, content, date) VALUES ('My Title', 'My Content', 'My Date')
$data = array(
'title' => $title,
'name' => $name,
'date' => $date
);
$this->db->where('id', $id);
$this->db->update('mytable', $data);
// Produces:
//
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$date}'
// WHERE id = $id
/*
class Myclass {
public $title = 'My Title';
public $content = 'My Content';
public $date = 'My Date';
}
*/
$object = new Myclass;
$this->db->where('id', $id);
$this->db->update('mytable', $object);
// Produces:
//
// UPDATE `mytable`
// SET `title` = '{$title}', `name` = '{$name}', `date` = '{$date}'
// WHERE id = `$id`
$this->db->delete('mytable', array('id' => $id)); // Produces: // DELETE FROM mytable // WHERE id = $id
$tables = $this->db->list_tables();
foreach ($tables as $table)
{
echo $table;
}
if ($this->db->table_exists('table_name'))
{
// კოდი ...
}
$fields = $this->db->list_fields('table_name');
foreach ($fields as $field)
{
echo $field;
}
if ($this->db->field_exists('field_name', 'table_name'))
{
// კოდი ...
}
<?php
class News_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
}
ამ მომენტისათვის უკვე განსაზღვრული უნდა გვქონდეს მონაცემთა ბაზის კონფიგურაციული პარამეტრები ("CI - მონაცემთა ბაზასთან მუშაობა"
განყოფილების მე-2-ე თავი). ახლა შევქმნათ სიახლეების ცხრილი მონაცემთა ბაზაში და დავარქვათ მას news
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);
ახლა მოდელში ჩავამატოთ მეთოდი get_news, რომელიც ამოიღებს ჩანაწერებს news ცხრილიდან
<?php
class News_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
}
get_news()მეთოდის მეშვეობით შესაძლებელია ორი სახის მოთხოვნის შესრულება: შეგვიძლია ცხრილიდან ამოვიღოთ ყველა
ჩანაწერი, ან ამოვიყოთ კონკრეტული ჩანაწერი $slug პარამეტრის მიხედვით.
http://localhost/news
მაგრამ თუ კონკრეტული სიახლის ამოღება გვინდა მაშინ URL მისამართი მიიღებს შემდეგ სახეს
http://localhost/news/georgia
შევნიშნოთ, რომ მისამართი ახალი სეგმენტის დამატების შემდეგაც საკმაოდ ლოგიკური და აფვილად წაკითხვადია, როგორც ადამიანისათვის,
ასევე საძიებელი სისტემებისათვის. მისამართში გამოყენებული სიტყვა georgia შესაძლებელია იყოს უნიკალური იდენტიფიკატორი
ცხრილში არსებული კონკრეტული ჩანაწერისათვის, სიახლისათვის. დავუშვათ გვაქვს ცხრილი შემდეგი ველებით
id
news_title
news_author
news_unique_identifier
ამ ცხრილიდან კონკრეტული ჩანაწერის ამოღებისას slug პარამეტრის მნიშვნელობად უნდა გამოვიყენოთ news_unique_identifier
ველი.
ახლა დავუბრუნდეთ ჩვენს მიერ შექმნილ მოდელს
public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
ამ მეთოდში აღწერილი კოდი სისტემას ეუბნება რომ თუ $slug პარამეტრის მნიშვნელობა არის FALSE, მაშინ ცხრილიდან ამოიღოს ყველა
ჩანაწერი. ხოლო თუ URL მისამართში გაჩნდება ახალი სეგმენტი, მისი მნიშვნელობა აღიქვას როგორც $slug პარამეტრი და ცხრილიდან ამოიღოს
ის ჩანაწერი, რომლის უნიკალური ველის (slug) მნიშვნელობაც არის ამ პარამეტრის მიმდინარე მნიშვნელობის ტოლი (get_where('news', array('slug' => $slug));).
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
$this->load->helper('url_helper');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
}
public function view($slug = NULL)
{
$data['news_item'] = $this->news_model->get_news($slug);
}
}
__construct() მეთოდი იძახებს News კლასის მშობელი კლასის - CI_Controller-ის კონსტრუქტორს, ტვირთავს
მოდელს და URL მისამართების დამხმარეს. შემდეგ აღწერილია ორი მეთოდი: პირველი გამოიყენება ყველა ჩანაწერის სანახავად მეორე კი ერთი
კონკრეტულისა. მეორე მეთოდში გამოძახებულ მოდელის get_news() ფუნქციას პარამეტრად გადაცემული აქვს $slug ცვლადი,
რომელიც კონტროლერში დაფიქსირდება იმ შემთხვევაში თუ URL მისამართში გაჩნდება ახალი სეგმენტი, და რომელსაც მოდელი იყენებს კონკრეტული
ჩანაწერის იდენტიფიკაციისათვის.
მას შემდეგ რაც კონტროლერსაც მივაწოდეთ საჭირო ინფორმაცია, ისღა დაგვრჩენია საქმეში ჩავრთოთ წარმოდგენის ფაილი
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
ეს კოდი მოდელიდან მიღებულ ყველა ჩანაწერს მოათავსებს $data მასივში, აგრეთვე განსაზღვრავს სიახლეების გვერდის სათაურს
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
სწორედ ეს მასივი უნდა გადაეცეს შესაბამის წარმოდგენას, შევქმნათ წარმოდგენის ფაილი application/views/news/index.php
შემდეგი კოდით
<h2><?php echo $title; ?></h2>
<?php foreach ($news as $news_item): ?>
<h3><?php echo $news_item['title']; ?></h3>
<div class="main">
<?php echo $news_item['text']; ?>
</div>
<p><a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a></p>
<?php endforeach; ?>
foreach ციკლის დახმარებით მოხდება ცხრილში არსებული ჩანაწერების ცალ-ცალკე გამოტანა წარმოდგენაში. ერთ გვერდზე ყველა ჩანაწერი
გამოვიტანეთ, ახლა შესაქმნელია კონკრეტული სიახლის სანახავი წარმოდგენის შექმნა, ამისათვის ჯერ კონტროლერს უნდა დავამატოთ შესაბამისი
მეთოდი view
public function view($slug = NULL)
{
$data['news_item'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
როგორც ვხედავთ get_news() მეთოდს გადაეცა პარამეტრი $slug, კონკრეტული ჩანაწერის იდენტიფიკატორი. ახლა შევქმნათ
წარმოდგენის ფაილი application/views/news/view.php შემდეგი კოდით
<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
<h2><?php echo $title; ?></h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create'); ?>
<label for="title">Title</label>
<input type="input" name="title" /><br />
<label for="text">Text</label>
<textarea name="text"></textarea><br />
<input type="submit" name="submit" value="Create news item" />
</form>
ახლა კონტროლერში დავამატოთ ჩანაწერის დასამატებელი მეთოდი create
public function create()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Create a news item';
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('text', 'Text', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header', $data);
$this->load->view('news/create');
$this->load->view('templates/footer');
}
else
{
$this->news_model->set_news();
$this->load->view('news/success');
}
}
კოდის პირველი ხაზი ტვირთავს ფორმის დამხმარეს, მეორე კი - ვალიდაციის ბიბლიოთეკას. ამის შემდეგ ხდება ვალიდაციის წესების განსაზღვრა,
set_rules() ფუნქციას გადაეცემა სამი პარამეტრი: ველის სახელი, ველის სახელი შეცდომებში გამოსატანად და თავად ვალიდაციის წესი.
ამ შემთხვევაში სათაურის და ტექსტის ველების შეყვანა აუცილებელია.
ამის შემდეგ მოწმდება წარმატებით დასრულდა თუ არა ვალიდაცია, თუ ვალიდაცია წარუმატებელია ისევ ფორმის გვერდზე ვრჩებით, ხოლო თუ ვალიდაცია წარმატებით დასრულდება ხდება მოდელის გამოძახება. ამის შემდეგ კი იტვირთება წარმატების გვერდი შესაბამისი შეტყობინებით. შევქმნათ ეს გვერდი application/views/news/success.php შემდეგი ტექსტით
<h2>სიახლე წარმატებით დაემატა.</h2>
public function set_news()
{
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);
return $this->db->insert('news', $data);
}
მოდელში გამოყენებულია url_title() ფუნქცია, ეს ფუნქცია განთავსებულია URL დამხმარეში ახდენს მიწოდებული სტრიქონის
ჩასწორებას: გამოტოვებული ადგილები იცვლება ტირით, აგრეთვე ყველა სიტყვა იწერება პატარა ასოებით.
ახლა გავარკვიოთ თუ რა ხდება $data მასივში. მისი ყველა ელემენტი შეესაბამება მბ-ში გაკეთებული ცხრილის ველთა დასახელებებს, შემდეგ გამოყენებულია input ბიბლიოთეკის post() მეთოდი, რომელიც ახდენს ველებში შეყვანილი ინფორმაციის გასუფთავებას და გადამოწმებას. input ბიბლიოთეკის ჩატვირთვა ხდება ავტომატურად, სისტემის მიერ. ამის შემდეგ კი ხდება $data მასივში მოთავსებული ინფორმაციის მბ-ში შეტანა.
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';