Hauptmenü

Werkzeuge

Kategorien

Archiv

MySQL Tabellenname als Prefix für Alias

Erstellt in Allgemein am 21. Oktober 2014 vom Daschmi

Wenn man zum Beispiel bei einem komplexen Join automatisch alle Spalten mit Prefixen für eine Tabelle versehen will kann man folgenden Code verwenden:

function fetchAssoc(&$db, $strQuery)
{

  $result = $db->query($strQuery);

  $arReturn = array();

  while ($row = $result->fetch_assoc())
  {

    $arReturn[] = $row;

  }

  return $arReturn;

} 

function prefixed_table(&$db, $table_alias, $table)
{

  $columns = fetchAssoc($db, "SHOW COLUMNS FROM `".$table."`");

  $field_names = array();

  foreach ($columns as $column)
  {

    $field_names[] = $column["Field"];

  }

  $prefixed = array();

  foreach ($field_names as $field_name)
  {

  	$prefixed[] = "`".$table_alias."`.`".$field_name."` AS `".$table.".".$field_name."`";

  }

	return implode(", ", $prefixed);

}

Beispielhafte Anwendung für einen xtCommerce Export:

define(TBL_PRODUCTS, ‚xt_products‘);
define(TBL_PRODUCTS_DESCRIPTION, ‚xt_products_description‘);
define(TBL_PRODUCTS_CATEGORIE, ‚xt_products_to_categories‘); 

$db = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

$strQuery = "
  SELECT
    ".prefixed_table($db, ‚P‘, TBL_PRODUCTS).",
    ".prefixed_table($db, ‚PD‘, TBL_PRODUCTS_DESCRIPTION).",
    GROUP_CONCAT(PC.`categories_id`) AS `".TBL_PRODUCTS_CATEGORIE.".categories_id`,
    GROUP_CONCAT(PC.`master_link`) AS `".TBL_PRODUCTS_CATEGORIE.".master_link`
  FROM
    `".TBL_PRODUCTS."` AS P
      LEFT JOIN `".TBL_PRODUCTS_DESCRIPTION."` AS PD ON (P.`products_id` = PD.`products_id`)
      LEFT JOIN `".TBL_PRODUCTS_CATEGORIE."` AS PC ON (P.`products_id` = PC.`products_id`)
  GROUP BY
    P.`products_id`
";

$product_data = fetchAssoc($db, $strQuery);

Templavoilá Template Domainbezogen umschalten / gleicher Seitenbaum

Erstellt in Allgemein am 14. Oktober 2014 vom Daschmi

Möchte man im TYPO3 für einen Seitenbaum mehrere Templavoilá Templates verwenden, so ist dies bisher nicht möglich. Das Seitentemplate ist direkt in dem Datensatz der Seite zugeordnet. Über eine kleine Userfunktion und etwas Typoscript kann dies aber umgangen werden.

Hier die Userfunktion:

class user_tv
{

  function main($content, $conf)
  {

    $GLOBALS[‚TSFE‘]->page[‚tx_templavoila_to‘] = 5;

  }

}

Die 5 muss durch die ID des Templavoila Templateobjects ersetzt werden. Das Umschalten des Templats erfolgt dann mittels folgendem Typoscript Schnipsel:

...
page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page

[hostname = m.add-solution.de] || [globalString = IENV:HTTP_HOST = m.add-solution.de]
includeLibs.lang = fileadmin/user_tv.php
page.1 = USER
page.1.userFunc = user_tv->main

page.10 = USER
page.10.userFunc = tx_templavoila_pi1->main_page
[global]
...

Push Mitteilungen an Android Smartphones mit PHP versenden

Erstellt in Allgemein am 6. Oktober 2014 vom Daschmi

Kleine Funktion, mit der es möglich ist Push Mitteilungen über den GoogleCloud Message Dienst an registrierte Android Geräte zu versenden.

function android_sendPush($arDeviceIDs, $data)
{

  $apiKey = “; // API Schlüssel eintragen
  $url = ‚https://android.googleapis.com/gcm/send‘;

  $post = array(
	‚registration_ids‘ =>$arDeviceIDs,
 	‚data‘ => $data
  );

  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    ‚Authorization: key=‘.$apiKey,
    ‚Content-Type: application/json‘
  ));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));

  $result = curl_exec($ch);

  if (curl_errno($ch))
  {

    die(‚CURL Fehler: ‚.curl_error($ch));
    curl_close($ch);
    return 0;

  }

  return sizeof($arDeviceIDs);

}

Platzhalter mit „placeholder“ Attribut in Inputfeldern vom Typ „password“

Erstellt in Allgemein am 26. September 2014 vom Daschmi

Damit man einen klartext Platzhalter für Inputfelder vom Typ „password“ verwenden kann, kann folgender Beispielcode verwendet werden:

<form method="POST" action="">

<div class="pwd_fields">
  <input type="text" name="pw_old" value="" autocomplete="off" placeholder="Altes Passwort" />
  <input type="text" name="pw1" value="" autocomplete="off" placeholder="Neues Passwort" />
  <input type="text" name="pw2" value="" autocomplete="off" placeholder="Neues Passwort (Wiederholung)" />
</div>

</form>

<script type="text/javascript">/* <![CDATA[ */

  jQuery(document).ready(function() {
    jQuery(‚.pwd_fields input‘).bind(‚focus‘, function() {
      if (jQuery(this).attr("type") == "text") { jQuery(this).val(“); jQuery(this).attr("type", "password"); }
    } ).bind(‚blur‘, function() {
      if (jQuery(this).val().trim() == “) jQuery(this).attr("type", "text");
    } );
  } );

/* ]]> */</script>

Bei einer Validierung oder serverseitigen Verarbeitung muss dies aber berücksichtigt werden!

Beispiel



WordPress Plugin in Pluginverwaltung verstecken/verbergen

Erstellt in Allgemein am 24. September 2014 vom Daschmi

Manchmal ist es notwendig ein Plugin in der Pluginverwaltung von WordPress zu verstecken. Möchte man beispielsweise das WordPress Shop Plugin System wpShopGermany in der Pluginverwaltung von WordPress verstecken, kann folgender Code verwendet werden:

function my_hide_plugin()
{

  global $wp_list_table;

  foreach ($wp_list_table->items as $key => $val)
  {

    if ($key == ‚wpshopgermany/wpshopgermany.php‘)
    {

      unset($wp_list_table->items[$key]);

    }

  }

}

add_action(‚pre_current_active_plugins‘, ‚my_hide_plugin‘);

Das Plugin ist weiterhin normal einsatzbereit, erscheint aber nicht mehr in der Pluginverwaltung. Der obige Code kann einfach in der functions.php des aktuellen Themes platziert werden. Wechselt man auf das Standard Theme oder kommentiert den Code aus, so ist das Plugin auch wieder normal sichtbar.