Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Archive for the ‘PHP’ Category

Dodawanie pliku .xxx w Windows

with one comment

Często spotykam się z różnymi proponowanymi obejściami (tworzenia z linii poleceń) albo tłumaczeniami, że jest to wyjątkowo trudne podczas próby stworzenia w Windows pliku, którego nazwa znajduje się dopiero po kropce. W systemach pochodnych od Unix można to zrobić poprzez proste:

touch .gitignore
touch .htaccess

Windows domyślnie nie dostarcza narzędzia touch, a próba utworzenia pliku o podanej wcześniej nazwie kończy się nieprzyjemnym komunikatem „Zmień nazwꔄWpisz nazwę pliku”.

Rozwiązanie:

Wpisując nazwę pliku dodajemy kropkę na końcu nazwy pliku, przykładowo przy tworzeniu nowego pliku (klikamy prawym przyciskiem myszy > Nowy > Dokument Tekstowy):

.gitignore.

Zostaniemy zapytani, czy chcemy zmienić nazwę pliku – oczywiście, że tak.

Powstanie plik .gitignore

Dlaczego? Nie mam bladego pojęcia.

Written by filipgorczynski

2015.02.10 at 20:09:19

Zmiana pierwszej litery na wielką z uwzględnieniem polskich znaków diakrytycznych

leave a comment »

PHPPrzykład prostej funkcji narzędziowej do zmiany pierwszej litery łańcucha znaków na wielką z uwzględnieniem polskich znaków diakrytycznych.

function ucfirst_utf8($str) {
    if (mb_check_encoding($str, 'UTF-8')) {       
        $first = mb_substr(mb_strtoupper($str, 'UTF-8'), 0, 1, 'UTF-8');       
        return $first . mb_substr(mb_strtolower($str, 'UTF-8'), 1, mb_strlen($str), 'UTF-8');   
    } else       
        return $str;
}

Przykład użycia:

var_dump(ucfirst('żółty żółw'));
var_dump(ucfirst('zażółć gęślą jaźń'));
var_dump(ucfirst_utf8('żółty żółw'));
var_dump(ucfirst_utf8('zażółć gęślą jaźń'));

oraz wynik działania:

string(16) "żółty żółw"
string(26) "Zażółć gęślą jaźń"
string(16) "Żółty żółw"
string(26) "Zażółć gęślą jaźń"

Written by filipgorczynski

2014.10.18 at 21:13:59

Napisane w PHP, Programowanie

Tagged with ,

Komunikaty (flash messages) w Symfony2

leave a comment »

Symfony logoPrzykładowy sposób wykorzystania komunikatów w Symfony.
W kontrolerze:
$success = 'Komunikat informujący o powodzeniu wykonanej operacji.';
$this->get('session')->getFlashBag()->add('success', $success);
$error = 'Komunikat informujący o niepowodzeniu wykonanej operacji.';
$this->get('session')->getFlashBag()->add('error', $error);
$warning = 'Komunikat informujący o ostrzeżeniu podczas wykonywanej operacji.';
$this->get('session')->getFlashBag()->add('warning', $warning);
$notice = 'Komunikat informujący o wykonanej operacji.';
$this->get('session')->getFlashBag()->add('notice', $notice);

W szablonie (Twig)

{# twig template #}
{% for type, flashMessages in app.session.flashbag.all() %}
{% for flashMessage in flashMessages %}
      <div class="{{ type }}">{{ flashMessage }}</div>
   {% endfor %}
{% endfor %}

Written by filipgorczynski

2014.09.17 at 20:45:46

Eksport wszystkich baz z MySQL do plików SQL

5 komentarzy

Eksport wszystkich baz danych z MySQL.

<?php
header('Content-type: text/html; charset=utf-8');
class Config {
   public static $host = '127.0.0.1';
   public static $username = 'root';
   public static $password = '';
   public static $port = 3306;
}

if (!file_exists('dbdumps') || !is_dir('dbdumps'))
   mkdir('dbdumps', 0700);

$dsn = 'mysql:host=' . Config::$host . ';port=' . Config::$port;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$dbh = new PDO($dsn, Config::$username, Config::$password, $options);

$result = $dbh->query('SHOW DATABASES;');
if ($result !== false)
   foreach ($result->fetchAll() as $row) {
      $cmd = 'mysqldump -u ' . Config::$username . ' -p' . Config::$password
         . ' ' . $row['Database'] . ' > dbdumps/' . $row['Database'] . '.sql';
      system($cmd);
      $fileSize = filesize('dbdumps/' . $row['Database'] . '.sql');
      echo 'File ' . $row['Database'] . '.sql saved [' . $fileSize . ' bytes] .<br />';
   }

Written by filipgorczynski

2012.10.12 at 19:09:15

Drupal 6 – Własny blok zmiany języka

leave a comment »

Domyślny blok „Przełączanie języków” nie posiada zbyt ciekawych możliwości formatowania. Często tego typu elementy opisuje się w HTML na liście, co później znacznie ułatwia dla tej struktury określanie kaskadowych arkuszy stylów. Poniżej  sposób na zastosowanie swojego bloku bazujący na module locale domyślnie dostarczanym z Drupalem:

<?php
/**
* Implements hook_block();
*/
function hook_block($op = 'list', $delta = 0, $edit = array()) {
  if ($op == 'list') {
    $blocks['custom_language_switcher'] = array(
      'info' => t('Custom Language Switcher'),
    );
  return $blocks;
} else if ($op == 'view') {
  switch ($delta) {
    case 'custom_language_switcher':
      if (variable_get('language_count', 1) > 1
        && variable_get('language_negotiation', LANGUAGE_NEGOTIATION_NONE) != LANGUAGE_NEGOTIATION_NONE) {
        $path = drupal_is_front_page() ? '<front>' : $_GET['q'];
        $languages = language_list('enabled');
        $links = array();
        foreach ($languages[1] as $language)
          $links[$language->language] = array(
            'href' => $path,
            'title' => $language->native,
            'language' => $language,
            'attributes' => array('class' => 'language-link'),
          );
        drupal_alter('translation_link', $links, $path);

        $block = array(
          'subject' => t('Custom Language Switcher'),
          'content' => _custom_get_language_switcher($links)
        );
      }
      break;
    }
    return $block;
  }
}

function _custom_get_language_switcher($links = array()) {
  global $language;
  $html = '';
  if (count($links)) {
    $html = '<ul class="language-switcher">';
    foreach ($links as $key => $value) {
    $active = '';
      if ($key == $language->language)
        $active = ' class="active"';
      $html .= "\t\t" . '<li' . $active . '><a href="' . url($value['href'], array('language' => $value['language'])) . '"' . $active . '>' . $value['title'] . '</a></li>' . "\n";
    }
    $html .= "\t" . '</ul>' . "\n";
  }
  return $html;
}

Written by filipgorczynski

2012.10.12 at 18:56:26

PhpMyAdmin – konfiguracja autologowania

leave a comment »

Po ściągnięciu najnowszej wersji PhpMyAdmin praktycznie każda próba wejścia do panelu będzie wymagała od nas podania loginu i hasła. Na komputerach developerskich często jest to niewielkie utrudnienie. Aby logowanie następowało automatycznie należy:
1. Otwieramy plik PhpMyAdmin/libraries/config.default.php, gdzie PhpMyAdmin to lokalizacja panelu na serwerze.
2. Zmieniamy wartość:

$cfg['Servers'][$i]['host'] = 'localhost'; // lub odpowiednia nazwa hosta, o ile wcześniej nie była ustawiona

3. Zmieniamy wartość:

$cfg['Servers'][$i]['auth_type'] = 'config'; // wcześniej cookie

4. Zmieniamy wartość:

$cfg['Servers'][$i]['user'] = 'mysql_username'; // nazwa użytkownika, najczęściej root

5. Zmieniamy wartość:

$cfg['Servers'][$i]['password'] = 'mysql_password'; // hasło użytkownika, najczęściej użytkownika root

6. Wchodzimy na stronę PhpMyAdmin na naszym serwerze i powinniśmy automatycznie być zalogowani.

Uruchamianie własnego kodu PHP w kontekście Drupala 7 + tworzenie node’ów

leave a comment »

Kilka dni temu pojawiła się potrzeba zaimportowania z przygotowanego pliku kilku wpisów do postaci node’ów. Oprócz oczywistego faktu wczytywania z pliku i modyfikacji treści należało uruchomić własny skrypt w sposób, który pozwalałby m.in. na korzystanie z modułów Drupala – stworzenie i zapisanie node’ów do bazy.

Samo uruchomienie własnego kodu PHP w kontekście Drupala 7 z dostępem do modułów wymaga poniższych linijek. Jak łatwo zauważyć, jest t kod żywcem skopiowany z pliku index.php z katalogu głównego Drupala.

<?php
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Kolejnym wyzwaniem jest stworzenie obiektu node’a oraz zapisanie go do bazy Drupala.

$node = new stdClass();
$node->type = 'content_type'; // typ node'a jaki chcemy stworzyć (page, article, ...)
$node->title = $details['name'];
$node->language = LANGUAGE_NONE;
$node->field_country[LANGUAGE_NONE][0]['tid'] = $term->tid;
$node->field_city[LANGUAGE_NONE][0]['value'] = $_details['city'];
$node->field_street[LANGUAGE_NONE][0]['value'] = $details['street'];
$node->field_zip[LANGUAGE_NONE][0]['value'] = $details['zip'];
$node->field_website[LANGUAGE_NONE][0]['url'] = $details['www'];
$node->field_phone[LANGUAGE_NONE][0]['value'] = $details['phone'];
$node->field_email[LANGUAGE_NONE][0]['value'] = $details['email'];

node_object_prepare($node);
module_load_include('inc', 'pathauto');
$node->path['alias'] = preg_replace('/[^a-z0-9_]/i', '-', pathauto_cleanstring($title));
node_save($node);

Zasada jest dość prosta. Tworzymy prosty obiekt w PHP i nadajemy wszystkie wymagane wartości. Nazewnictwo pól w tworzonym obiekcie (np.: field_email)
musi być takie jak pól określanych przy tworzeniu danego typu treści.
Stała LANGUAGE_NONE jest określa dowolny język (wartość ‚und’) i zaleca się zawsze podawanie tej wartości – oczywiście stosownie zmieniając ją, jeśli node ma zostać dodany w określonym języku.
Funkcja node_object_prepare opakowuje obiekt w dodatkowe pola, które są wymagane do poprawnego zapisania node’a do bazy.
Wykorzystując module_load_include – będącą funkcją znajdującą się w jądrze Drupala wczytujemy wymagane moduły – zabezpieczając się przed dostępem do funkcji, których definicji jeszcze nie udało się załadować do pamięci. W naszym wypadku wczytujemy moduł Pathauto aby wygenerować alias dla naszego node’a – ładniej wyglądał będzie adres /nasz-nowy-node niż node/123.

Wykorzystane funkcje:
drupal_bootstrap
node_object_prepare
module_load_include
pathauto_cleanstring
node_save

%d blogerów lubi to: