PDA

Zobacz pełną wersję : o zalogowanym ...



xbary
27-09-2009, 21:08
Witam

Mam takie pytanie odnośnie statusu czy ktoś jest zalogowany na stronie, wiem wiem pewnie teraz wszyscy odpiszą że to już było tysiące razy, ale ja trochę inaczej chciałem to sprawdzić.
Chodzi mi o coś takiego, mam sobie gdzieś na serwerze plik FL1.PHP i po wywołaniu go w przeglądarce bezpośrednio w pasku adresu ma zacząć się ściąganie pliku. Ogólnie to jest proste i to już zrobiłem, ale teraz bym chciał zrobić tak żeby ten plik się ściągał dopiero wtedy jak ktoś się zaloguje na stronie


??


oto fragment moich wypocin:



<?php

define( '_JEXEC', 1 );
define('JPATH_BASE', "/home/checkban/public_html" );
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

defined('_JEXEC') or die('Restricted access');
?><?php

$user = & JFactory::getUser();
echo (!$user->get('guest')) ? 'logout' : 'login';
exit;

if($user->guest)
{
echo "<html><title>CheckBank</title><body>Błąd: Pobierany plik prawdopodobnie nie istnieje.</body></html>";
exit;
};
.....
tutaj dalszy kod jak zalogowany.




Przypominam że to nie jakiś fragment modułu czy innego wynalazku joomla , tylko sobny plik PHP wywoływany przez kliknięcie w link albo w pasku adresu.

Jola
27-09-2009, 22:49
Szukaj -> "zalogowany".
Było całkiem niedawno.

xbary
27-09-2009, 23:07
<?php if ( empty($my->username) ) {
echo "nie";
}
else
{
echo "tak";
} ?>

ta metoda zawiodła, nie pokazuje mi czy zalogowany czy nie, wciąż jest nie

Jola
27-09-2009, 23:09
Bo to metoda dla !J 1.0.
Trochę dalej jest o 1.5 :)

moje
27-09-2009, 23:11
Bo to nie tak, w dziale tłumaczeń jest dodatek hider, przeanalizuj jego kod.

xbary
27-09-2009, 23:12
Metoda dla joomla 1.5 była użyta w podanym przykładzie na samym początku tematu, i to właśnie ona też ta metoda wciąż pokazuje mi jedną wartość.

Dodam że używam joomla 1.5.14 ...

Jola
27-09-2009, 23:20
Zastosuj: $user->get('id') zamiast $user->get('guest') a gwarantuję, że zadziała (za dużo tłumaczenia dlaczego - kiedyś sam do tego dojdziesz)

xbary
27-09-2009, 23:23
Może inaczej.

Na próbę proponuję zróbić plik PHP od zera, taki który wyświetli czy użytkownik jest zalogowany czy nie. Do tego pliku w jakimś artykule zrobić normalne łącze i czy to zadziała?? bo o to mi chodzi.
Może być tak że coś u mnie z konfiguracją albo z czymś jeszcze jest nie tak.

Jola
27-09-2009, 23:35
1. Są komponenty do udostępniania plików z możliwością ustawienia czy niezalogowany na do nich prawo.
2. Informację do obcego pliku można przekazać za pomocą zmiennej GET
3. Wyświetlanie linku może być uwarunkowane tym, czy jest się zalogowanym
4. Artykuły lub część artykułu (z adresem) moze być dostępna dopiero po zalogowaniu.
itd, itd

xbary
27-09-2009, 23:43
1. Są komponenty do udostępniania plików z możliwością ustawienia czy niezalogowany na do nich prawo.
2. Informację do obcego pliku można przekazać za pomocą zmiennej GET
3. Wyświetlanie linku może być uwarunkowane tym, czy jest się zalogowanym
4. Artykuły lub część artykułu (z adresem) moze być dostępna dopiero po zalogowaniu.
itd, itd

ad1 po licha mam używać jakieś wielkie kloce jak chcę prosto sprawdzić czy jest ktoś zalogowany...i później podjąć odpowiednią akcje.

ad2 jeśli informacja będzie przekazywana w treści linku o ile dobrze rozumiem to sobie ktoś też będzie przekazywał tą informacje i będzie tak że ktoś wywoła sobie gdzieś mój plik i mu zadziała bo zasymuluje argument.

ad3 może być uwarunkowane, ale jeśli ktoś już się dowie jaki to link to rozniesie go po sieci, a ja chcę żeby tylko to działało jak ktoś się zaloguje na mojej stronie

ad4 tak jak w ad3


Kombinuje z tym już prawie weekend cały, bo wcześniej chciałem zastosować remository albo docman, ale to za wielkie przyrządy do tak prostej (chyba) operacji. A po drugie to te komponenty mają pełno błędów...

zwiastun
28-09-2009, 00:00
Wyważanie otwartych drzwi jest zawsze wartościowe pod względem edukacyjnym. Czy sensowne, to już inna kwestia.

a) może to wystarczy - żadna kobyła, a swoje robi: http://wiki.joomla.pl/Jsmallfib_%E2%80%93_zarz%C4%85dzanie_plikami
b) a może komponent attachements?
c) a może parę jeszcze innych?

moje
28-09-2009, 00:03
Wyżej nakierowałem na Hider (http://www.joomla.pl/forum/showthread.php?t=30254).

xbary
28-09-2009, 00:14
Oki :) dziękuje za pomoc, ale ciąg dalszy zmagań jutro od rana... jak rozwiąże problem odezwę się napewno...

Jola
28-09-2009, 00:54
Tak powinien wyglądać poprawny kod zewnętrznego pliku, który sprawdza zalogowanie użytkownika (jeśli plik znajduje sie w katalogu głównym Joomla):

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$user = & JFactory::getUser();
if($user->get('id'))
echo "Jesteś zalogowany";
else
echo "Jesteś niezalogowany"; :)

xbary
28-09-2009, 09:03
No i pięknie działa, Bardzo dziękuje za pomoc.
Trzeba było dopisać tylko:


$mainframe =& JFactory::getApplication('site');

Widocznie funkcja getApplication coś inicjuje pomimo istnienia klasy JFactory...

Pozdrawiam

mari008
21-01-2010, 12:51
Tak powinien wyglądać poprawny kod zewnętrznego pliku, który sprawdza zalogowanie użytkownika (jeśli plik znajduje sie w katalogu głównym Joomla):

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$user = & JFactory::getUser();
if($user->get('id'))
echo "Jesteś zalogowany";
else
echo "Jesteś niezalogowany"; :)

Kod faktycznie dziala. Mam jednak pytanie jak powinien wygladac kod gdy plik znajduje sie nie w katalogu głownym lecz np. FORM/test.php . Domyslam sie ze zmianie ulegnie linia: define('JPATH_BASE', dirname(__FILE__) );

Jola
21-01-2010, 16:52
Dobrze myślisz - trzeba wtedy zdefiniować ścieżkę do katalogu głównego.

mari008
21-01-2010, 17:17
Dobrze myślisz - trzeba wtedy zdefiniować ścieżkę do katalogu głównego.
Moglbys mi napisac jak powinna wygladac ta linia kodu: define('.....?...', dirname(__FILE__) ); gdy plik znajduje sie <katalog_głowny>/FORM/test.php

Jola
21-01-2010, 18:05
To, że masz problem ze zmodyfikowaniem kodu - to rozumiem, ale żeby mówić do mnie jak do faceta - tego już nie rozumiem. :)

<?php
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
$sciezka = str_replace(DS.'FORM', '', dirname(__FILE__));
define('JPATH_BASE', $sciezka);
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$user = & JFactory::getUser();
if($user->get('id'))
echo "Jesteś zalogowany";
else
echo "Jesteś niezalogowany";
?>

mari008
21-01-2010, 19:12
To, że masz problem ze zmodyfikowaniem kodu - to rozumiem, ale żeby mówić do mnie jak do faceta - tego już nie rozumiem. :)


Dziala ! W swoim poprzednim poscie zwracalem sie do Super Moderator-a, ktorym ty jestes ;). Mozesz mi wskazać gdzie moge znalesc dobry zasób wiedzy odnosnie programowania pod joomla. Jeszcze raz wielkie dzieki za pomoc kolezanko :) Pozdrawiam

Jola
21-01-2010, 22:33
Hmmm, programować można się nauczyć tylko w jeden sposób - programując.
Serwer na komputerze z Joomla + podstawy PHP + podstawy SQL + logiczne myślenie + duuużo własnej pracy.
Źródła wiedzy - jak kto lubi: forum, joomla.pl, wiki.joomla.pl, joomla.org (materiały po angielsku), Sieć, książki.
Przykładowo: Własny komponent (http://www.forum.joomla.pl/showthread.php?t=7348&highlight=kurs+komponent%C3%B3w)
Ale to temat na osobny wątek i chyba nie w tym dziale. :)