Wo lege ich Bilddateien, CSS, JS usw. in Codeigniter ab?

144

Wo ist es akzeptabel, CSS-Ordner und Image-Dateiordner abzulegen? Ich habe im Ansichtsordner nachgedacht? Der Controller leitet den Pfad jedoch immer zur Basis-URL um, sodass ich den Pfad in der HTML-Datei angeben muss, in der er sich befindet, was redundant ist.

triq
quelle

Antworten:

202

Ich habe ein Setup wie dieses:

  • Anwendung
  • System
  • Vermögenswerte
    • js
    • imgs
    • CSS

Ich habe dann eine Hilfsfunktion, die abhängig von meinem Setup einfach den vollständigen Pfad dazu zurückgibt, ähnlich wie:

application / helpers / Utility_helper.php:

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

Normalerweise behalte ich ähnliche Routinen in derselben Datei und lade sie automatisch mit der Autoload-Konfiguration des Codeigniters.

Hinweis: URL-Helfer zum automatischen Laden für den base_url()Zugriff.

application / config / autoload.php:

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

Sie haben dann Zugriff auf asset_url()Ihren gesamten Code.

Eddie
quelle
1
Hallo Eddie, ich frage mich, wo Sie Ihren Funktionscode ablegen. Soll ich ihn in file_helper.php ablegen?
Kebyang
3
Hallo @KebyangBlabla Ich habe meine Antwort mit ein bisschen mehr Informationen aktualisiert, die dir helfen sollen.
Eddie
10
Um Zugriff auf 'baseurl ()' zu erhalten, müssen Sie auch den 'url'-Helfer einschließen, wie folgt:$autoload['helper'] = array('url', 'utility');
Jeffrey
Eine bessere Möglichkeit besteht darin, einen Ordner mit Ihren Assets im Webstamm (meiner ist public_html) und dann CI in einem Verzeichnis über dem Webstamm zu haben.
Nate Nolting
3
Falls andere wie ich sind, greifen Sie zur Verdeutlichung wie folgt darauf zu: <? = Asset_url ();?> Css / css.css
JonYork
50

Nein, im Ansichtsordner ist nicht gut.

Schauen Sie: Sie müssen 3 grundlegende Ordner in Ihrem Projekt haben:

System // Dies ist ein CI-Framework. Es gibt nicht viele Gründe, diese Dateien zu berühren

Anwendung // Hier geht Ihre Logik hin, die Dateien, aus denen die Anwendung besteht.

public // Dies muss Ihre Dokumentenwurzel sein

Aus Sicherheitsgründen ist es besser, Ihr Framework und die Anwendung außerhalb Ihrer Dokumentwurzel zu halten (public_html, htdocs, public, www ... etc).

In Ihrem öffentlichen Ordner sollten Sie Ihre öffentlichen Informationen ablegen, was die Browser sehen können. Es ist üblich, die Ordner zu finden: images, js, css; Ihre Struktur wird also sein:

|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess
Juan Jo
quelle
1
Was ist die index.php im öffentlichen Ordner? ist das 404 Datei? danke
DeLe
Entschuldigen Sie die Verzögerung, aber die lo: T Die Datei index.php ist die Datei, die die Anforderung abfängt und den Rest des Frameworks aufruft.
Juan Jo
@ Juan Jo ..Ich verwende CodeIgniter-3.0.6. Ich kann keinen Ordner mit dem Namen finden. publicGibt es ein Problem beim Hinzufügen eines Ordners mit demselben Namen?
Akhil Vijay
@AkhilVijay Sie werden es nicht in Ihrem Codeigniter-Ordner finden, Ordner wird sein, wenn Sie es auf einem beliebigen Server bereitstellen
Anwar Hossain
Der beste Weg, um mit Codeigniter zu arbeiten, ist das .htaccessEntfernen /index.php?und Aufrufen des öffentlichen Ordners mitbase_url().'public/yourfolder';
Robert Blasco Villarroya
16

So gehe ich mit dem öffentlichen Vermögen um. Hier verwende ich die Bootstrap-Methode von Phalcon PHP .

Ordnerstruktur

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

Zu bearbeitende Dateien

  1. .htaccess*

    Alle Anforderungen an das Projekt werden in das Verzeichnis public / geschrieben, wodurch es zum Dokumentenstamm wird. Dieser Schritt stellt sicher, dass die internen Projektordner nicht öffentlich angezeigt werden können, und beseitigt somit Sicherheitsbedrohungen dieser Art. - Phalconphp Doc

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

    Die Regeln prüfen, ob die angeforderte Datei vorhanden ist, und müssen in diesem Fall nicht vom Webservermodul neu geschrieben werden. - - 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***

    Ändern Sie den applicationPfad und den systemPfad als,

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

Jetzt verwenden Sie den publicOrdner alsbase_url()."public/[YOUR ASSET FOLDER]"

Hoffe das hilft :)

Ijas Ameenudeen
quelle
Haben Sie den obigen Code getestet? Ich glaube, in der letzten Zeile ist ein Fehler aufgetreten. Sie leiten alle Anfragen an /publicdas Warum weiter base_url ()."public/[.... Es sollte gerecht sein base_url ()."/[YOUR ASSET FOLDER]".
Kerkouch
12

Normalerweise lege ich alle meine Dateien so in einen "Assets" -Ordner im Anwendungsstamm und stelle dann sicher, dass ich einen Asset_Helper verwende , um auf diese Dateien für mich zu verweisen. Dies schlägt CodeIgniter vor.

Bürger conn
quelle
7

Niemand sagt, dass Sie die .htacces ändern und das Verzeichnis in der Umschreibungsbedingung hinzufügen müssen. Ich habe ein Verzeichnis "public" im Stammverzeichnis zusammen mit "system", "application", "index.php" erstellt. und bearbeitete die .htaccess-Datei wie folgt:

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

Jetzt müssen Sie nur noch aufrufen. <?php echo base_url()."/public/yourdirectory/yuorfile";?> Sie können das Unterverzeichnis im Verzeichnis "public" hinzufügen, wie Sie möchten.

Kreker
quelle
Ich bin eine Unmenge Jahre zu spät, aber wenn jemand dies liest, war diese Antwort meine ursprüngliche Lösung. Wenn Sie jedoch den Zugriff über virtuelle Hosts verwalten, ist es meiner Meinung nach eine bessere Idee, den virtuellen Host auf den öffentlichen Ordner zu verweisen und zu behalten die .htaccess-Konfiguration. Upvote trotzdem, weil diese Antwort mich auf die Lösung
hinweist
5

Unabhängig davon, wo Sie die CSS-Datei ablegen, können Sie einfach den CodeIgniter "html" -Helfer namens link_tag () verwenden. Sie würden diesen Helfer ungefähr so ​​anwenden:

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

Es liegt an Ihnen, die CSS-Datei an der am besten geeigneten Stelle zu finden (Ihrer Meinung nach). Sie müssten entweder den "HTML" -Helfer automatisch laden oder separat laden, um ihn zu verwenden.

Die Leute schlagen immer wieder die Verwendung von base_url () vor, um dies zu erreichen, aber es ist eigentlich nicht die "CodeIgniter" -Methode (ich denke, diese Frage hat ein paar Duplikate). Das wird funktionieren, aber einer der Gründe für die Verwendung eines Frameworks ist die Verwendung der darin enthaltenen vorgefertigten Funktionen.

Es gibt viele Helfer im Codeigniter, die so etwas tun.

Cheesus Toast
quelle
4

Fügen Sie einen Ordner mit einem beliebigen Namen hinzu, z. B. public, und fügen Sie die .htaccess- Datei hinzu, und schreiben Sie, was alles bedeutet. In diesem Ordner geben alle Dateien und alle Ordner keinen Fehler. Zugriff verboten! benutze es so

<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>
Sandeep Mehra
quelle
4

Ich verwende die neueste Version von CodeIgniter 3.1.0. Die Ordnerstruktur ist:

  • System
  • Anwendung
  • Benutzerhandbuch
  • Vermögenswerte
    • Bilder
    • js
    • CSS

Dort sollten Sie die Bilder-, CSS- und JS-Dateien im Assets-Ordner ablegen.

am coolsten
quelle
3

Ich benutze folgende Ordnerstruktur:

application 
system 
static
    admin
        js
        css
        images
    public
        js
        css
        images
    uploads
        original
        thumbs
Skorpion
quelle
2

(Ich bin neu bei Codeigniter, daher weiß ich nicht, ob dies der beste Rat ist.)

Ich behalte öffentlich verfügbare Dateien in meinem öffentlichen Ordner. Es ist logisch, dass sie dort sind, und ich möchte Codeigniter nicht für etwas verwenden, für das ich es nicht verwenden muss.

Der Verzeichnisbaum sieht folgendermaßen aus:

  • /Anwendung/
  • /Öffentlichkeit/
  • / public / css /
  • / public / img /
  • / public / js /
  • /System/

Die einzigen Dateien, die ich in / public / aufbewahre, sind die index.php von Codeigniter und meine .htaccess-Datei:

RewriteEngine On
RewriteBase /

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

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

Sie können den CSS-Ordner im Assest-Ordner (Sie nennen ihn einen beliebigen Namen) im Verzeichnis Ihres Projekts wie folgt ablegen:

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

... wenn Sie diese Datei auf einer Seite laden möchten, können Sie die Funktion base_url () folgendermaßen verwenden: <head> <link rel='stylesheet' href='<?php echo base_url();?>assets/css/style.css'> </head> und Sie müssen base_url Ihres Projekts wie folgt in die Datei config.php einfügen:

$config['base_url'] = 'http://localhost/ci_app';
Rabab Sh
quelle
0

Hallo, unsere Struktur ist wie Anwendung, System, Benutzerhandbuch

Erstellen Sie einen Ordnernamen mit Assets in der Nähe aller Ordner und legen Sie dann in diesem Assets-Ordner CSS- und Javascript- und Bilderordner ab. Legen Sie alle Ihre CSS-Js in die Ordner

Gehen Sie jetzt zu header.php und rufen Sie das CSS einfach so auf.

<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"> 
Piyush Dhanotiya
quelle
-2

Der link_tag()Helfer ist eindeutig der Weg, dies zu tun. Platzieren Sie Ihr CSS dort, wo es normalerweise hingehört, in site_root / css / und verwenden Sie dann den Helfer:

Aus den CodeIgniter-Dokumenten ...

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

Ausgabe

<link href="http://example.com/css/mystyles.css" rel="stylesheet" type="text/css" />
Stephen C.
quelle