Gdzie umieścić pliki graficzne, css, js itp. W Codeigniter?

144

Gdzie można umieszczać foldery css i foldery z plikami obrazów? Myślałem o folderze widoku? Jednak kontroler zawsze przekierowuje ścieżkę do podstawowego adresu URL, więc muszę określić ścieżkę w pliku .html do miejsca, w którym się znajduje, co jest zbędne.

triq
źródło

Odpowiedzi:

202

Mam taką konfigurację:

  • podanie
  • system
  • majątek
    • js
    • imgs
    • css

Mam wtedy funkcję pomocniczą, która po prostu zwraca pełną ścieżkę do tego w zależności od mojej konfiguracji, coś podobnego do:

application / helpers / utility_helper.php:

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

Zwykle trzymam typowe procedury podobne do tego w tym samym pliku i ładuję go automatycznie z konfiguracją automatycznego ładowania codeignitera.

Uwaga: pomocnik adresu URL automatycznego ładowania w celu base_url()uzyskania dostępu.

application / config / autoload.php:

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

Będziesz mieć wtedy dostęp do asset_url()całego kodu.

Eddie
źródło
1
cześć eddie, zastanawiam się, gdzie umieścić kod funkcji ... czy powinienem umieścić go w file_helper.php?
kebyang
3
Cześć @KebyangBlabla Zaktualizowałem moją odpowiedź o trochę więcej informacji, które powinny ci pomóc.
Eddie
10
Aby uzyskać dostęp do „baseurl ()”, musisz również dołączyć pomocnika „url”, na przykład:$autoload['helper'] = array('url', 'utility');
Jeffrey
Lepszym rozwiązaniem może być posiadanie folderu zasobów w katalogu głównym sieci (mój to public_html), a następnie umieszczenie CI w katalogu powyżej katalogu głównego sieci.
Nate Nolting
3
W przypadku, gdy inni są tacy jak ja, dla wyjaśnienia, uzyskujesz do niego dostęp w ten sposób <? = Asset_url ();?> Css / css.css
JonYork
50

Nie, wewnątrz folderu widoków nie jest dobrze.

Spójrz: musisz mieć 3 podstawowe foldery w swoim projekcie:

system // To jest framework CI, nie ma zbyt wielu powodów, aby dotykać tych plików

aplikacja // tutaj kieruje się Twoja logika, pliki, które tworzą aplikację ,

public // to musi być twój katalog główny

Ze względów bezpieczeństwa lepiej jest trzymać framework i aplikację poza katalogiem (public_html, htdocs, public, www ... itd.)

W swoim folderze publicznym powinieneś umieścić swoje publiczne informacje, to, co widzą przeglądarki, typowe dla znalezienia folderów: images, js, css; więc twoja struktura będzie:

|- system/
|- application/
|---- models/
|---- views/
|---- controllers/
|- public/
|---- images/
|---- js/
|---- css/
|---- index.php
|---- .htaccess
Juan Jo
źródło
1
co to jest index.php w folderze publicznym? czy to plik 404? dzięki
DeLe
Przepraszamy za opóźnienie, ale w przypadku lo: T Plik index.php będzie plikiem, który przechwyci żądanie i wywoła resztę frameworka.
Juan Jo
@Juan Jo .. Używam CodeIgniter-3.0.6 Nie mogę znaleźć żadnego folderu o nazwie. publicCzy jest jakiś problem z dodaniem folderu o tej samej nazwie?
Akhil Vijay
@AkhilVijay nie znajdziesz go w folderze codeigniter, folder będzie, gdy wdrożysz go na dowolnym serwerze
Anwar Hossain
najlepszym sposobem pracy z codeigniterem jest .htaccessusuwanie /index.php?i wywoływanie folderu publicznegobase_url().'public/yourfolder';
Robert Blasco Villarroya
16

Tak postępuję z majątkiem publicznym. Tutaj używam metody Bootstrap Phalcon PHP .

Struktura folderów

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

Pliki do edycji

  1. .htaccess*

    Wszystkie żądania kierowane do projektu zostaną przepisane do katalogu public /, dzięki czemu będzie to katalog główny dokumentu. Ten krok zapewnia, że ​​wewnętrzne foldery projektów pozostają ukryte przed publicznym przeglądaniem, a tym samym eliminuje tego rodzaju zagrożenia bezpieczeństwa. - Phalconphp Doc

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

    Reguły sprawdzą, czy żądany plik istnieje, a jeśli tak, to nie musi być przepisywany przez moduł serwera WWW. - 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***

    Zmodyfikuj applicationścieżkę i systemścieżkę jako,

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

Teraz używasz publicfolderu jakobase_url()."public/[YOUR ASSET FOLDER]"

Mam nadzieję że to pomoże :)

Ijas Ameenudeen
źródło
Czy przetestowałeś powyższy kod, myślę, że w ostatniej linii jest błąd, przekierowujesz wszystkie żądania do, /publicwięc dlaczego base_url ()."public/[...! Powinno być sprawiedliwe base_url ()."/[YOUR ASSET FOLDER]".
Kerkouch
12

Zwykle umieszczam wszystkie moje pliki w folderze „ asset ” w katalogu głównym aplikacji, a następnie upewniam się, że używam Asset_Helper, aby wskazać te pliki za mnie. To właśnie sugeruje CodeIgniter.

obywatel Conn
źródło
7

Nikt nie mówi, że musisz zmodyfikować .htacces i dodać katalog w warunku przepisywania. Utworzyłem katalog „public” w katalogu głównym obok „system”, „aplikacja”, „index.php”. i edytować plik .htaccess w ten sposób:

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

Teraz musisz po prostu zadzwonić. <?php echo base_url()."/public/yourdirectory/yuorfile";?> Możesz dodać podkatalog do katalogu „public”, jak chcesz.

Kreker
źródło
Jestem spóźniony o miliardy lat, ale jeśli ktoś to czyta, ta odpowiedź była moim początkowym rozwiązaniem, ale jeśli zarządzasz dostępem przez wirtualne hosty, myślę, że lepszym pomysłem jest wskazanie wirtualnego hosta do folderu publicznego i zachowanie plik config .htaccess. Mimo wszystko
zagłosuj za,
5

Niezależnie od tego, gdzie umieścisz plik CSS, możesz po prostu użyć helpera CodeIgniter "html" o nazwie link_tag (). Zastosowałbyś tego pomocnika mniej więcej tak:

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

To do Ciebie należy zlokalizowanie pliku CSS w najbardziej odpowiednim miejscu (Twoim zdaniem). Trzeba by było albo automatycznie załadować helpera "html", albo osobno załadować go, żeby z niego korzystać.

Ludzie ciągle sugerują użycie metody base_url (), aby to osiągnąć, ale tak naprawdę nie jest to sposób, w jaki można to zrobić w "CodeIgniter" (myślę, że to pytanie ma kilka duplikatów). To zadziała, ale jednym z powodów korzystania z frameworka jest użycie gotowych funkcji w nim.

W Codeigniter jest wielu pomocników, którzy mogą robić tego typu rzeczy.

Tost z serem
źródło
4

dodaj do jednego folderu dowolną nazwę np. publiczny i dodaj plik .htaccess i zapisz zezwalaj na wszystko to znaczy, w tym folderze wszystkie twoje pliki i wszystkie foldery nie będą dawać błędu Dostęp zabroniony! użyj tego w ten sposób

<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
źródło
4

Używam najnowszej wersji CodeIgniter 3.1.0. Jego struktura folderów jest następująca:

  • system
  • podanie
  • user_guide
  • majątek
    • zdjęcia
    • js
    • css

Tam należy umieścić obrazy, pliki css i js w folderze zasobów.

najfajniejsze
źródło
3

Używam następującej struktury folderów:

application 
system 
static
    admin
        js
        css
        images
    public
        js
        css
        images
    uploads
        original
        thumbs
Skorpion
źródło
2

(Jestem nowy w Codeigniter, więc nie wiem, czy to najlepsza rada)

Pliki dostępne publicznie przechowuję w moim folderze publicznym. To logiczne, że tam są i nie chcę używać Codeignitera do czegoś, do czego nie muszę go używać.

Drzewo katalogów wygląda następująco:

  • /podanie/
  • /publiczny/
  • / public / css /
  • / public / img /
  • / public / js /
  • /system/

Jedyne pliki, które trzymam w / public /, to index.php Codeigniter i mój plik .htaccess:

RewriteEngine On
RewriteBase /

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

RewriteRule ^index.php(.*)$ - [L]
RewriteRule ^(.*)$ /index.php?/$1 [L]
Anthony Scaife
źródło
2

możesz umieścić folder css w folderze assest (możesz go nazwać dowolną nazwą) w katalogu swojego projektu jako:

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

... kiedy chcesz załadować ten plik na stronę, możesz użyć funkcji base_url () w następujący sposób: <head> <link rel='stylesheet' href='<?php echo base_url();?>assets/css/style.css'> </head> i na pewno dodasz base_url swojego projektu w pliku config.php w następujący sposób:

$config['base_url'] = 'http://localhost/ci_app';
Rabab Sh
źródło
0

Cześć, nasza konstrukcja jest podobna do aplikacji, systemu, przewodnika użytkownika

utwórz nazwę folderu zasoby tuż obok wszystkich folderów, a następnie w tym folderze zasobów utwórz folder css i javascript oraz obrazy umieść wszystkie pliki css js w folderach

teraz przejdź do header.php i wywołaj css w ten sposób.

<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
źródło
-2

link_tag()Pomocnik jest wyraźnie sposób to zrobić. Umieść swój css w miejscu, w którym zwykle należy, w site_root / css /, a następnie użyj helpera:

Z dokumentacji The CodeIgniter ...

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

Wynik

<link href="http://example.com/css/mystyles.css" rel="stylesheet" type="text/css" />
Stephen C.
źródło