Où dois-je mettre des fichiers image, css, js, etc. dans Codeigniter?


144

Où est-il acceptable de placer des dossiers css et des dossiers de fichiers image? Je pensais à l'intérieur du dossier de vue? Cependant, le contrôleur redirige toujours le chemin vers l'URL de base, je dois donc spécifier le chemin dans le fichier .html vers l'endroit où il se trouve, ce qui est redondant.

Réponses:


202

J'ai une configuration comme celle-ci:

  • application
  • système
  • les atouts
    • js
    • imgs
    • css

J'ai alors une fonction d'assistance qui renvoie simplement le chemin complet vers cela en fonction de ma configuration, quelque chose de similaire à:

application / helpers / utility_helper.php:

function asset_url(){
   return base_url().'assets/';
}

Je vais généralement garder des routines communes similaires à celle-ci dans le même fichier et le charger automatiquement avec la configuration de chargement automatique de codeigniter.

Remarque: aide à l'URL de chargement automatique pour l' base_url()accès.

application / config / autoload.php:

$autoload['helper'] = array('url','utility');

Vous aurez alors accès à asset_url()tout votre code.


1
salut eddie, je me demande où mettez-vous votre code de fonction .. devrais-je le mettre dans file_helper.php?
kebyang

3
Salut @KebyangBlabla J'ai mis à jour ma réponse avec un peu plus d'informations qui devraient vous aider.
Eddie

10
Pour accéder à 'baseurl ()', vous devrez également inclure l'assistant 'url', comme ceci:$autoload['helper'] = array('url', 'utility');
Jeffrey

Une meilleure solution pourrait être d'avoir un dossier de vos actifs dans le dossier racine Web (le mien est public_html), puis CI dans un répertoire au-dessus de la racine Web.
Nate Nolting

3
Au cas où d'autres seraient comme moi, pour clarifier, vous y accédez comme ceci <? = Asset_url ();?> Css / css.css
JonYork

50

Non, à l'intérieur du dossier vues n'est pas bon.

Regardez: Vous devez avoir 3 dossiers de base sur votre projet:

system // Ceci est le cadre CI il n'y a pas beaucoup de raisons de toucher à ces fichiers

application // c'est là que va votre logique, les fichiers qui font l'application ,

public // cela doit être votre documentroot

Pour des raisons de sécurité, il est préférable de garder votre framework et l'application en dehors de votre racine de document, (public_html, htdocs, public, www ... etc)

À l'intérieur de votre dossier public, vous devez mettre vos informations publiques, ce que les navigateurs peuvent voir, il est courant de trouver les dossiers: images, js, css; votre structure sera donc:

|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess

1
quel est l'index.php dans le dossier public? est ce fichier 404? merci
DeLe

Désolé pour le retard, mais pour le lo: T Le fichier index.php sera le fichier qui attrapera la requête et appellera le reste du framework.
Juan Jo

@Juan Jo .. J'utilise CodeIgniter-3.0.6. Je ne trouve aucun dossier nommé. publicY a-t-il un problème pour ajouter un dossier avec le même nom.
Akhil Vijay

@AkhilVijay, vous ne le trouverez pas dans votre dossier codeigniter, le dossier sera lorsque vous le déploierez sur n'importe quel serveur
Anwar Hossain

la meilleure façon de travailler avec codeigniter c'est de faire le .htaccesspour supprimer /index.php?et appeler le dossier public avecbase_url().'public/yourfolder';
Robert Blasco Villarroya

16

C'est ainsi que je gère les biens publics. Ici, j'utilise la méthode Bootstrap de Phalcon PHP .

Structure des dossiers

|-.htaccess*
|-application/
|-public/
  |-.htaccess**
  |-index.php***
  |-css/
  |-js/
  |-img/
  |-font/
  |-upload/
|-system

Fichiers à modifier

  1. .htaccess*

    Toutes les demandes adressées au projet seront réécrites dans le répertoire public / , ce qui en fera la racine du document. Cette étape garantit que les dossiers de projet internes restent cachés à la visualisation publique et élimine ainsi les menaces de sécurité de ce type. - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule  ^$ public/    [L]
        RewriteRule  (.*) public/$1 [L]
    </IfModule>
  2. .htaccess**

    Les règles vérifieront si le fichier demandé existe et, si tel est le cas, il n'a pas besoin d'être réécrit par le module du serveur Web. - Phalconphp Doc

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php/$1 [QSA,L]
    </IfModule>
  3. index.php***

    Modifiez le applicationchemin et le systemchemin comme,

    $system_path = '../system';
    $application_folder = '../application';

Maintenant, vous utilisez le publicdossier commebase_url()."public/[YOUR ASSET FOLDER]"

J'espère que cela t'aides :)


Avez-vous testé le code ci-dessus, je pense qu'il y a une erreur sur la dernière ligne, vous redirigez toutes les requêtes vers /publicalors pourquoi base_url ()."public/[...! Cela devrait être juste base_url ()."/[YOUR ASSET FOLDER]".
Kerkouch

12

Je mets généralement tous mes fichiers comme ça dans un dossier "assets" à la racine de l'application, puis je m'assure d'utiliser un Asset_Helper pour pointer vers ces fichiers pour moi. C'est ce que suggère CodeIgniter.


7

Personne ne dit que vous devez modifier le .htacces et ajouter le répertoire dans la condition de réécriture. J'ai créé un répertoire "public" dans le répertoire racine avec "system", "application", "index.php". et édité le fichier .htaccess comme ceci:

RewriteCond $1 !^(index\.php|public|robots\.txt)

Maintenant, vous devez simplement appeler <?php echo base_url()."/public/yourdirectory/yuorfile";?> Vous pouvez ajouter un sous-répertoire dans le répertoire "public" comme vous le souhaitez.


J'ai un milliard d'années de retard, mais si quelqu'un lit ceci, cette réponse était ma solution initiale, mais si vous gérez l'accès via des hôtes virtuels, je pense que c'est une meilleure idée de pointer l'hôte virtuel vers le dossier public et de le conserver la configuration .htaccess. Votez quand même parce que cette réponse m'indique la solution
Vertig0

5

Quel que soit l'endroit où vous placez le fichier CSS, vous pouvez simplement utiliser l'assistant CodeIgniter "html" appelé link_tag (). Vous appliqueriez cette aide quelque chose comme ceci:

echo link_tag('folder/subfolder/stylesheet.css');

A vous de localiser le fichier CSS à l'endroit le plus approprié (à votre avis). Vous devrez soit charger automatiquement l'assistant "html", soit le charger séparément pour l'utiliser.

Les gens continuent à suggérer l'utilisation de base_url () pour y parvenir, mais ce n'est pas vraiment la façon "CodeIgniter" de le faire (je pense que cette question a quelques doublons). Cela fonctionnera, mais l'une des raisons d'utiliser un framework est d'utiliser les fonctions prédéfinies qu'il contient.

Il existe de nombreux assistants dans codeigniter pour faire ce genre de chose.


4

ajoutez un dossier n'importe quel nom, par exemple public et ajoutez le fichier .htaccess et autorisez l' écriture de tout ce que cela signifie, dans ce dossier tous vos fichiers et tous vos dossiers ne donneront pas d'erreur Accès interdit! utilise-le comme ça

<link href="<?php echo base_url(); ?>application/public/css/style.css" rel="stylesheet" type="text/css"  />
<script type="text/javascript" src="<?php echo base_url(); ?>application/public/js/javascript.js"></script>

4

J'utilise la dernière version de CodeIgniter 3.1.0. La structure des dossiers de celui-ci est:

  • système
  • application
  • mode d'emploi
  • les atouts
    • images
    • js
    • css

C'est là que vous devez placer les fichiers images, css et js dans le dossier assets.


3

J'utilise la structure de dossiers suivante:

application 
system 
static
    admin
        js
        css
        images
    public
        js
        css
        images
    uploads
        original
        thumbs

2

(Je suis nouveau sur Codeigniter, donc je ne sais pas si c'est le meilleur conseil)

Je garde les fichiers accessibles au public dans mon dossier public. Il est logique qu'ils soient là, et je ne veux pas utiliser Codeigniter pour quelque chose pour lequel je n'ai pas besoin de l'utiliser.

L'arborescence de répertoires ressemble à ceci:

  • /application/
  • /Publique/
  • / public / css /
  • / public / img /
  • / public / js /
  • /système/

Les seuls fichiers que je garde dans / public / sont index.php de Codeigniter et mon fichier .htaccess:

RewriteEngine On
RewriteBase /

RewriteRule ^css/ - [L]
RewriteRule ^img/ - [L]
RewriteRule ^js/ - [L]

RewriteRule ^index.php(.*)$ - [L]
RewriteRule ^(.*)$ /index.php?/$1 [L]

2

vous pouvez placer le dossier css dans le dossier assest (vous lui donnez n'importe quel nom) dans le répertoire de votre projet comme:

- ci_app
- application 
- views      
- assets 
  - css 
    - style.css 

... lorsque vous voulez charger ce fichier dans une page, vous pouvez utiliser la fonction base_url () de cette façon: <head> <link rel='stylesheet' href='<?php echo base_url();?>assets/css/style.css'> </head> et vous êtes sûr d'ajouter base_url de votre projet dans le fichier config.php comme ceci:

$config['base_url'] = 'http://localhost/ci_app';

0

Salut notre structure est comme Application, système, user_guide

créer un nom de dossier actifs juste à côté de tous les dossiers, puis dans ce dossier actifs créer un dossier css et javascript et images placer tous vos js css dans les dossiers

allez maintenant dans header.php et appelez le css comme ceci.

<link rel="stylesheet" href="<?php echo base_url();?>assets/css/touchTouch.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/style.css">
  <link rel="stylesheet" href="<?php echo base_url();?>assets/css/camera.css"> 

-2

L' link_tag()assistant est clairement le moyen de le faire. Mettez votre css à sa place habituelle, dans site_root / css /, puis utilisez l'assistant:

À partir de la documentation CodeIgniter ...

echo link_tag('css/mystyles.css');

Production

<link href="http://example.com/css/mystyles.css" rel="stylesheet" type="text/css" />
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.