2009-10-03 5 views
2

Les codes suivants proviennent de http://d.hatena.ne.jp/dix3/20081002/1222899116 et les codes fonctionnent correctement.Création d'un objet à partir d'une classe dans Codeigniter

Ceci est un exemple d'utilisation de snoopy dans codeigniter.

Q1. Est-ce que j'ai raison de dire que je ne peux pas utiliser,

$this -> load -> library('snoopy') 

puisque Snoopy.php ne crée pas d'objet. Et l'exemple ci-dessous est la façon de le faire? Si oui, pouvez-vous m'expliquer/diriger un tutoriel ou une explication sur la façon de le faire dans les détails?

if (! class_exists('Snoopy')) 
    { 
     require_once(APPPATH.'libraries/Snoopy'.EXT); 
    } 

Q2. Pourquoi l'auteur utilise-t-il

$to_specialchars=true 

Est-ce nécessaire pour cela?

Q3. Pourriez-vous expliquer APPPATH et EXT.

APPPATH.'libraries/Snoopy'.EXT 

Je l'ai vérifié sur php.net mais je ne l'ai pas trouvé. EXT doit être extension, mais puis-je utiliser n'importe où?

Merci d'avance.

I ont une snoopy dans application/bibliothèque/Snoopy.php

je application/bibliothèque/Snoopy.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Scraping{ 
    var $c; 
    function Scraping(){ 
     if (! class_exists('Snoopy')) 
     { 
      require_once(APPPATH.'libraries/Snoopy'.EXT); 
     } 
     $this -> c = new Snoopy(); 
    } 

    function getWebHtml($url="",$to_specialchars=true){ 
     $this ->c -> fetch($url); 
     $str = mb_convert_encoding((string) $this -> c -> results,"UTF-8","auto"); 
     return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8") : $str ; 
    } 

    function getWebText($url="",$to_specialchars=true){ 
     $this -> c -> fetchtext($url); 
     $str = mb_convert_encoding((string) $this -> c -> results,"UTF-8","auto"); 
     return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8") : $str ; 
    } 

    function getWebLinks($url=""){ 
     $this -> c -> fetchlinks($url); 
     return (array) $this-> c -> results ; 
    } 

    function getWebLinksText($url="",$delimiter="<br>"){ 
     $arr = $this-> getWebLinks($url) ; 
     $ret =""; 
     foreach($arr as $k => $v){ 
      $ret .= $v . $delimiter ; 
     } 
     return $ret; 
    } 

} //endofclass 

/* End of file Scraping.php */ 
/* Location: ./application/libraries/Scraping.php */ 
?> 

j'ai une application de contrôleur/régulateur/mytasklist.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Mytasklist extends Controller { 

function Mytasklist() 
{ 
    parent :: Controller(); 

    $this -> load -> helper('url'); 

} 

    function index() 
    { 
     $data = ""; 

     $this -> _SetTpl($data); 
    } 
function _SetTpl($data) 
{ 


    $this -> load -> library("scraping"); 
    $data["scraping"]["text"] = $this-> scraping -> getWebText("http://www.example.com/"); 
    $data["scraping"]["html"] = $this-> scraping -> getWebHtml("http://www.example.com/"); 
    $data["scraping"]["link"] = $this-> scraping -> getWebLinksText("http://www.example.com/","\n"); 

    $tpl["page_title"] = "Welcome"; 

    $tpl["main_content"] = $this -> load -> view('tasklist_view', $data , true); 

    $this -> load -> view('base_view', $tpl); 
} 


} 

Et j'ai vue, l'application/view/base_view.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <meta name="keywords" content="keyword here" /> 
    <meta name="description" content="description here" /> 
    <title><?php if(isset($page_title)){echo $page_title ;}?></title> 
    <?php if(isset($xajax_js)){echo $xajax_js ;}?> 
    <link href="http://127.0.0.1/ci_day4/css/mystyle.css" rel="stylesheet" type="text/css"/> 
</head> 
<body> 

<div id="container"> 


    <div id="rightblock"> 

     <div id="content"> 

      <?=$main_content?> 

     </div> 

    </div> 

</div> 

</body> 
</html> 

Répondre

15

Q1. Vous pouvez utiliser:

$this->load->library('snoopy'); 

Dans vos contrôleurs. Et créer une nouvelle instance comme ceci:

$snooper = new Snoopy(); 

La raison pour laquelle ils utilisent:

if (!class_exists('Snoopy')) { 
    require_once(APPPATH.'libraries/Snoopy'.EXT); 
} 

Est-ce parce que vous obtiendrez une erreur fatale si vous essayez d'utiliser $ this-> load-> Bibliothèque (), car la classe loader n'est pas disponible dans la bibliothèque. Vous pouvez l'appeler dans un contrôleur parce que vos contrôleurs étendent la classe de contrôleur, qui étend la classe ci_base, qui étend la classe ci_loader qui est la source de la fonctionnalité pour faire des appels comme $ this-> load. La classe Scraping que vous avez montrée ici ne l'est pas. Si vous creusez, vous verrez que le chargeur utilise essentiellement include_once pour inclure la classe, l'assistant etc. que vous essayez d'utiliser.

Q2.

$to_specialchars = true 

est utilisé dans un couple les déclarations de fonction en tant que paramètres.Un réglage « = true » est mise en juste un défaut, vous pouvez donc ce faire:

echo $scrappy->getWebHtml('http://example.com'); 

est identique à ceci:

echo $scrappy->getWebHtml('http://example.com', true); 

Si vous regardez la déclaration de retour de cette fonction, vous verrez qu'ils sont $ to_specialchars est en cours de vérification, et si c'est vrai, alors la sortie est exécutée d'abord par la fonction PHP htmlspecialchars().

Q3. Si vous regardez la racine de votre projet CodeIgniter, dans index.php vous verrez EXT définie comme:

define('EXT', '.'.pathinfo(__FILE__, PATHINFO_EXTENSION)); 

et APPATH:

if (is_dir($application_folder)) 
{ 
define('APPPATH', $application_folder.'/'); 
} 
else 
{ 
    if ($application_folder == '') 
    { 
     $application_folder = 'application'; 
    } 
    define('APPPATH', BASEPATH.$application_folder.'/'); 
} 

Donc, ce sont deux constantes étant fixées à bootstrapping, donc vous pouvez les utiliser dans votre application, et si vous deviez jamais les changer, alors ce ne serait pas des cas comme lorsque vous le voyez utilisé dans le code que vous avez fourni.

S'il vous plaît la prochaine fois que vous poser une question par stackoverflow question :)

+0

Vous avez écrit "Est-ce parce qu'ils l'utilisent dans une autre bibliothèque qui est indépendante de codeigniter"? Comment savez-vous que? – shin

+1

J'ai essayé d'éclaircir ce que j'ai dit dans la Q1. Les choses se passent en lisant le code et en essayant des choses.Si vous posez une question à la fois, il est plus facile de donner une réponse plus approfondie qu'une réponse géante. –

0

. Cet exemple de code Grattage a été écrit basé sur l'utilisation de la bibliothèque: "Snoopy - le client net PHP (snoopy.sourceforge.net)"


J'ai essayé de le publier à nouveau. mais je ne pouvais pas poster avec des hyperliens. désolé .. Je répondrai à cela dans mon site. (Je suis un débutant stackoverflow.com :-()

Je pense que je vais essayer de rediffuser ces réponses après quelques jours.

(http://d.hatena.ne.jp/dix3/20091004)

Questions connexes